当前位置: 首页 > 教程 > WebService >

JAX-WS示例(文档样式)

精华
小牛编辑
146浏览
2023-03-14

与RPC样式一样,可以在文档样式中创建JAX-WS示例。 为此,您只需要在服务接口中更改一行。
需要将Style.DOCUMENT用于@SOAPBinding注释来代替Style.RPC。下面我们来看看:

文件: HelloWorld.java -

@SOAPBinding(style = Style.DOCUMENT) // 它从RPC更改为 DOCUMENT

现在让我们看一下文档样式中JAX-WS的完整示例。打开 Eclipse ,创建一个Java工程:jaxwsdocument,并创建4个文件:

  • HelloWorld.java
  • HelloWorldImpl.java
  • Publisher.java
  • HelloWorldClient.java

3个文件是为服务器端应用程序创建的,客户端应用程序为创建1个文件。

JAX-WS服务器代码

文件:HelloWorld.java -

package com.yiibai;

import javax.jws.WebMethod;  
import javax.jws.WebService;  
import javax.jws.soap.SOAPBinding;  
import javax.jws.soap.SOAPBinding.Style; 

//Service Endpoint Interface  
@WebService  
@SOAPBinding(style = Style.DOCUMENT)  
public interface HelloWorld{  
    @WebMethod String getHelloWorldAsString(String name);  
}

文件:HelloWorldImpl.java -

package com.yiibai;

import javax.jws.WebService;  

//Service Implementation  
@WebService(endpointInterface = "com.yiibai.HelloWorld")  
public class HelloWorldImpl implements HelloWorld{  
  @Override  
  public String getHelloWorldAsString(String name) {  
      return "Hello World JAX-WS " + name;  
  }  
}

文件:Publisher.java -

package com.yiibai;

import javax.xml.ws.Endpoint;

//Endpoint publisher  
public class Publisher {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:7788/ws/hello", new HelloWorldImpl());
    }
}

如果运行Publisher类,则可能会生成以下错误:

Wrapper class com.yiibai.GetHelloWorldAsString is not found. 
Have you run APT to generate them?

要解决此问题,请在命令提示符下转到当前项目的bin目录。然后,运行以下命令:

wsgen -keep -cp . com.yiibai.HelloWorldImpl

现在,它将生成2个文件:

  • SayHello
  • SayHelloResponse

将这些文件粘贴到com.yiibai 目录中,然后运行Publisher 类。

如何查看生成的WSDL?

运行Publisher 代码后,可以通过访问URL来查看生成的WSDL文件:

http://localhost:7788/ws/hello?wsdl

JAX-WS客户端代码

文件:HelloWorldClient.java -

package com.yiibai;

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:7788/ws/hello?wsdl");  

        //1st argument service URI, refer to wsdl document above  
    //2nd argument is service name, refer to wsdl document above  
        QName qname = new QName("https://www.xnip.cn/", "HelloWorldImplService");  
        Service service = Service.create(url, qname);  
        HelloWorld hello = service.getPort(HelloWorld.class);  
        System.out.println(hello.getHelloWorldAsString("yiibai document web service"));  
     }  
 }

执行上面客户端代码,得到以下结果-

Hello World JAX-WS yiibai document web service