2、所需CXFJAR,在CXF下载包中均存在
cxf cxf 2.6.2 jar true cxf neethi 3.0.2 jar true cxf jaxb-api 2.2.6 jar true cxf jaxb-impl 2.2.5 jar true cxf wsdl4j 1.6.2 jar true cxf wss4j 1.6.7 jar true cxf xmlschema-core 2.0.3 jar true cxf xml-resolver 1.2 jar true cxf xmlsec 1.5.2 jar true cxf xmlbeans 2.5.0 jar true cxf saaj-api 1.3.4 jar true cxf saaj-impl 1.3.18 jar true cxf geronimo-activation_1.1_spec 1.1 jar true cxf geronimo-annotation_1.0_spec 1.1.1 jar true cxf geronimo-javamail_1.4_spec 1.7.1 jar true cxf velocity 1.7 jar true cxf jaxb-xjc 2.2.5 jar true
3、服务端接口:
package com.vtradex.training.server.cxf.helloworld; import javax.jws.WebParam; import javax.jws.WebService; import com.vtradex.training.server.cxf.WsConstants; /** * * @author 潘宁波 * @version $Revision: v1.0 $Date: 2012-8-31 $ */ @WebService(name = "HelloWorldService", targetNamespace = WsConstants.NS) public interface HelloWorldService { String say(@WebParam(name="message") String message); }
4、服务端实现类:
package com.vtradex.training.server.cxf.helloworld.impl; import javax.jws.WebService; import com.vtradex.training.server.cxf.WsConstants; import com.vtradex.training.server.cxf.helloworld.HelloWorldService; /** * WebService服务端实现类. * * serviceName与portName属性指明WSDL中的名称, endpointInterface属性指向Interface定义类. * * @author 潘宁波 * @version $Revision: v1.0 $Date: 2012-8-31 $ */ @WebService(serviceName = "HelloWorldService", portName = "HelloWorldServicePort", endpointInterface = "com.vtradex.training.server.cxf.helloworld.HelloWorldService", targetNamespace = WsConstants.NS) public class HelloWorldServiceImpl implements HelloWorldService { @Override public String say(String message) { return "Hello, " + message; } }
5、常量定义类:
package com.vtradex.training.server.cxf; /** * WebService常量定义. * * @author 潘宁波 * @version $Revision: v1.0 $Date: 2012-8-31 $ */ public class WsConstants { /**项目内统一的NameSpace定义, for SOAP.*/ public static final String NS = "http://thorn4.training.vtradex.com"; /**项目内统一的XML charset定义, for REST*/ public static final String CHARSET = ";charset=UTF-8"; }
6、发布服务的 Servlet
package com.vtradex.training.server.cxf.helloworld; import javax.servlet.ServletConfig; import javax.xml.ws.Endpoint; import org.apache.cxf.transport.servlet.CXFNonSpringServlet; import com.vtradex.training.server.cxf.helloworld.impl.HelloWorldServiceImpl; /** * * * @author 潘宁波 * @version $Revision: v1.0 $Date: 2012-9-1 $ */ public class WsServlet extends CXFNonSpringServlet { private static final long serialVersionUID = 1L; @Override protected void loadBus(ServletConfig sc) { super.loadBus(sc); System.out.println("Starting CXF Web Services... HelloWorldServices"); //: http://localhost:8088/training/ws/helloWorldService?wsdl Endpoint.publish("/helloWorldService", new HelloWorldServiceImpl()); } }
7、web.xml
CXFServlet com.vtradex.training.server.cxf.helloworld.WsServlet 2 CXFServlet /ws/*
8、启动Web服务,在浏览器中即可查看WSDL
9、CXF 客户端调用:
package com.vtradex.training.server.cxf.helloworld; import org.apache.cxf.endpoint.Client; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; /** * * * @author 潘宁波 * @version $Revision: v1.0 $Date: 2012-9-1 $ */ public class WsClient { public static void main(String[] args) { /** * 这种方式要求客户端必须依赖服务端 */ // JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean(); // bean.setServiceClass(HelloWorldService.class); // bean.setAddress("http://localhost:8088/training/ws/helloWorldService"); // HelloWorldService helloWorldService = (HelloWorldService)bean.create(); // String result = helloWorldService.say("Brofe"); // System.out.println(result); /** * 通过WSDL调用 */ JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient("http://localhost:8088/training/ws/helloWorldService?wsdl"); client.getInInterceptors().add(new LoggingInInterceptor()); client.getOutInterceptors().add(new LoggingOutInterceptor()); Object[] result; try { result = client.invoke("say", "brofe"); System.out.println(result[0]); } catch (Exception e) { e.printStackTrace(); } } }