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