如何使用CXF与WSDL文档深入分析?
使用CXF与WSDL文档深入分析
一:使用CXF 加入jar包
1)加入cxf 相关的jar包即可
2)
二:开发服务器端
1、Web Service编码
1)、@WebService( SEI接口和SEI的实现类)
2)、@WebMethod(SEI接口中的所有方法)
import javax.jws.WebMethod; import javax.jws.WebService; /** * 开发WebSerivce端 * SEI: * */ @WebService public interface HelloWebSerivce { //客户端调用的方法 @WebMethod public String getString(String name); } /** * SEI的实现 * */ @WebService public class HelloWebSerivceImp implements HelloWebSerivce { @Override public String getString(String name) { System.out.println("Serivce端:getString() "+name); return "Hello"+name; } }
2、Web Service发布
1、通过地址Wsdl
import javax.xml.ws.Endpoint; import com.web.serivce.ws.imp.HelloWebSerivceImp; /** * 发布Web Serivce * */ public class SerivceTest { public static void main(String[] args) { //ady01/Hello是随机编写 String address="http://localhost:8989/ady01/Hello"; Endpoint.publish(address, new HelloWebSerivceImp()); System.out.println("发布成功.."); } }
3、在Jetty上运行的
三:使用JDK的wsdl文档分析
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://imp.ws.serivce.web.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://imp.ws.serivce.web.com/" name="HelloWebSerivceImpService"> <!-- types 定义类型 schema : 定义了一些标签结构 约束 --> <types> <xsd:schema> <xsd:import namespace="http://imp.ws.serivce.web.com/" schemaLocation="http://localhost:8989/ady01/Hello?xsd=1"></xsd:import> </xsd:schema> </types> <!-- 定义消息(请求和响应) message: 用来定义消息的结构 soap消息 part : 指定引用types中定义的标签片断 --> <message name="getString"> <part name="parameters" element="tns:getString"></part> </message> <message name="getStringResponse"> <part name="parameters" element="tns:getStringResponse"></part> </message> <!-- SEI定义接口 portType: 用来定义服务器端的SEI operation : 用来指定SEI中的处理请求的方法 input : 指定客户端应用传过来的数据, 会引用上面的定义的<message> output : 指定服务器端返回给客户端的数据, 会引用上面的定义的<message> --> <portType name="HelloWebSerivceImp"> <operation name="getString"> <input wsam:Action="http://imp.ws.serivce.web.com/HelloWebSerivceImp/getStringRequest" message="tns:getString"></input> <output wsam:Action="http://imp.ws.serivce.web.com/HelloWebSerivceImp/getStringResponse" message="tns:getStringResponse"></output> </operation> </portType> <!-- SEI 定义接口的实现类 binding : 用于定义SEI的实现类 type属性: 引用上面的<portType> <soap:binding style="document"> : 绑定的数据是一个document(xml) operation : 用来定义实现的方法 <soap:operation style="document" /> 传输的是document(xml) input: 指定客户端应用传过来的数据 <soap:body use="literal" /> : 文本数据 output : 指定服务器端返回给客户端的数据 <soap:body use="literal" /> : 文本数据 --> <binding name="HelloWebSerivceImpPortBinding" type="tns:HelloWebSerivceImp"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding> <operation name="getString"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal"></soap:body> </input> <output> <soap:body use="literal"></soap:body> </output> </operation> </binding> <!-- 提供实现类(工厂) service : 一个webservice的容器 name属性: 它用一指定客户端容器类 port : 用来指定一个服务器端处理请求的入口(就SEI的实现) binding属性: 引用上面定义的<binding> address : 当前webservice的请求地址 --> <service name="HelloWebSerivceImpService"> <port name="HelloWebSerivceImpPort" binding="tns:HelloWebSerivceImpPortBinding"> <soap:address location="http://localhost:8989/ady01/Hello"></soap:address> </port> </service> </definitions>
四:SCF自动生成客户端代码
1)、使用wsdl2java文件
2)、将wsdl2java的路径(含bin之前的)加入Path中
3)、将服务端启动的wsdl文件源码复制到本地的wsdl文件中;
4)、在使用的配置好的wsdl2java自动生成代码
注意:对应的路径(本地和网址wsdl路径都可)
5)、刷新工程
6)、使用代码进行提交
注意:需要获取到对应的实现类(wsdl文件中)
import com.web.serivce.ws.HelloWebSerivce; import com.web.serivce.ws.imp.HelloWebSerivceImpService; public class CxfClientTest { public static void main(String[] args) { //工厂对象 HelloWebSerivceImpService factory = new HelloWebSerivceImpService(); //通过对象工厂生产动态的实现类 HelloWebSerivce helloWebSerivceImpPort = factory.getHelloWebSerivceImpPort(); String string = helloWebSerivceImpPort.getString("我调用的cxf"); System.out.println(string); } }
7)、可以使用WebSerivce浏览器查询
发表评论 取消回复