4

我正在参考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它时,它工作正常。但是,当我从客户端访问时,我得到了上述异常。请问有什么帮助吗?

4

5 回答 5

6

尝试更换

QName qname = new QName("http://localhost:8099/dummy1/dummy2?wsdl", "HelloWorldImplService");

QName qname = new QName("http://WebService/", "HelloWorldImplService");
于 2013-10-23T10:59:43.820 回答
2

这是我解决这个问题的方法:

1.运行Mkyong编写的发布者类;

2. 在浏览器中打开网址(例如:http://localhost:8099/dummy1/dummy2?wsdl);

3. 检查 WSDL 中的“targetNamespace”属性是否等于 QName 构造函数中的第一个参数。如果没有,请从 WSDL 设置它;

4. 检查 WSDL 中的“name”属性是否等于 QName 构造函数中的第二个参数。如果没有,请从 WSDL 设置它;

5. 停止客户端和发布者;

6. 运行发布者;

7.运行客户端;

8. 享受结果 =)

于 2016-09-12T12:09:42.823 回答
1

错误消息告诉您要修复什么:

有效的服务是:{http://WebService/}HelloWorldImplService

对我来说,以下是必要的:

QName qname = new QName("http://WebService/" , "HelloWorldImplService");
于 2016-03-23T17:37:30.937 回答
0

我没有尝试过,但我相信 QName 实例化中的第一个参数应该没有那个?wsdl。您被要求提供命名空间,而不是 WSDL 文档的 URI。

于 2013-10-23T06:38:24.467 回答
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)
于 2017-08-27T18:17:02.743 回答