在JAX-WS中不是有效的服务异常

时间:2013-10-23 05:58:44

标签: java soap jax-ws

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

5 个答案:

答案 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)