CXF基于webcontainer发布服务,不使用spring
1. 服务发布
a) 使用Endpoint发布
package com.cxf.servlet; import javax.servlet.ServletConfig; import org.apache.cxf.BusFactory; importorg.apache.cxf.frontend.Serverfactorybean; importorg.apache.cxf.transport.servlet.CXFNonspringServlet; import com.cxf.server.IHelloWorld; importcom.cxf.server.impl.HelloWorldImpl; public classtestCXFNonspringServlet extends CXFNonspringServlet { private static finallong serialVersionUID = -1225145505821698828L; @Override protected voidloadBus(ServletConfig sc) { super.loadBus(sc); javax.xml.ws.Endpoint.publish("/helloworld",new HelloWorldImpl()); } }
b) 使用ServerFactoryBean发布
public class TestCXFNonspringServletextends CXFNonspringServlet { privatestatic final long serialVersionUID = -1225145505821698828L; @Override protectedvoid loadBus(ServletConfig sc) { super.loadBus(sc); IHelloWorldhello = new HelloWorldImpl(); Serverfactorybeansfbean = new Serverfactorybean(); sfbean.setServiceClass(HelloWorldImpl.class); sfbean.setServiceBean(hello); sfbean.setAddress("/helloworld"); sfbean.create(); } }
2. 客户端调用
a) 使用JaxWsDynamicclientFactory调用
JaxWsDynamicclientFactory dcf =JaxWsDynamicclientFactory.newInstance(); org.apache.cxf.endpoint.Clientclient =dcf.createClient("http://localhost:8888/WebService/cxf/helloworld?wsdl"); QNamename=new QName("http://impl.server.cxf.com/","sayHi"); Object[]objects=client.invoke(name,"TOM"); System.out.println(objects[0].toString());
b) 使用JaxWsProxyfactorybean调用
// 创建WebService客户端代理工厂 JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean(); factory.getininterceptors().add(new LoggingInInterceptor()); factory.getoutInterceptors().add(new LoggingOutInterceptor()); // 注册WebService接口 factory.setServiceClass(IHelloWorld.class); // 设置WebService地址 factory.setAddress("http://localhost:8888/WebService/cxf/helloworld"); IHelloWorld client = (IHelloWorld) factory.create(); System.out.println("Server said: " + client.sayHi("Tom"));
3. web.xml配置
<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>com.cxf.servlet.TestCXFNonspringServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/cxf/*</url-pattern> </servlet-mapping>
使用JaxWsProxyfactorybean调用Serverfactorybean发布的服务时,参数传递到服务端为null,同样接收到服务器返回的参数也为null。暂时不清楚原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。