我正在参考http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/
这是我的 HelloWorldClient 类
package WebService;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class HelloWorldClient{
public static void main(String[] args) throws Exception {
URL url = new URL("http://localhost:8099/dummy1/dummy2?wsdl");
//1st argument service URI, refer to wsdl document above
//2nd argument is service name, refer to wsdl document above
QName qname = new QName("http://localhost:8099/dummy1/dummy2?wsdl", "HelloWorldImplService");
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
System.out.println(hello.getHelloWorldAsString("mkyong"));
}
}
运行此类时,我从下面的代码行中收到错误
Service service = Service.create(url, qname);
错误是
Exception in thread "main" javax.xml.ws.WebServiceException: {http://localhost:8099/dummy1/dummy2?wsdl}HelloWorldImplService is not a valid service. Valid services are: {http://WebService/}HelloWorldImplService
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:220)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:165)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93)
at javax.xml.ws.Service.<init>(Service.java:56)
at javax.xml.ws.Service.create(Service.java:680)
at WebService.HelloWorldClient.main(HelloWorldClient.java:19)
在HelloWorldClient类的参考示例中,它有
QName qname = new QName("http://ws.mkyong.com/", "HelloWorldImplService");
在我的情况下,我已将其替换为
QName qname = new QName("http://localhost:8099/dummy1/dummy2?wsdl", "HelloWorldImplService");
我无法弄清楚我犯了哪些错误。当我跑的时候
http://localhost:8099/dummy1/dummy2?wsdl
它工作正常。但是,当我从客户端访问时,我得到了上述异常。请帮忙吗?
答案 0 :(得分:3)
尝试替换
QName qname = new QName("http://localhost:8099/dummy1/dummy2?wsdl", "HelloWorldImplService");
与
QName qname = new QName("http://WebService/", "HelloWorldImplService");
答案 1 :(得分:3)
以下是解决此问题的方法:
1。运行Mkyong写的发布者类;
2。在浏览器中打开网址(例如:http:// localhost:8099 / dummy1 / dummy2?wsdl);
3。检查WSDL中的“targetNamespace”属性是否等于QName构造函数中的第一个参数。如果没有,请从WSDL中设置;
4。检查WSDL中的“name”属性是否等于QName构造函数中的第二个参数。如果没有,请从WSDL中设置;
5。停止客户和出版商;
6。运行发布者;
7。运行客户端;
8。享受结果=)
答案 2 :(得分:1)
错误消息告诉您要修复的内容:
有效服务包括:{http://WebService/}HelloWorldImplService
对我来说,以下是必要的:
QName qname = new QName("http://WebService/" , "HelloWorldImplService");
答案 3 :(得分:0)
我没有尝试过,但我相信QName实例化中的第一个参数应该没有?wsdl 。系统会要求您提供命名空间,而不是WSDL文档的URI。
答案 4 :(得分:0)
我解决了这个问题。我创建了WebServiceClient和WebServices项目。 和相同的文件: WebServiceClient :: webservices.HelloWorld.java webservices.HelloWorldClient.java
WebServices ::
webservices.HelloWorld.java
webservices.HelloWorldImpl.java
webservices.HelloWorldPublisher.java
I used NetBeans 8. In both project must have same name of package and
QName qname = new QName("http://webservices/", "HelloWorldImplService");
in webservices.HelloWorldClient.java.
The end. It runs ! Sorry My english. (Bobojonov Farruh)