1、main方式发布webservice服务(引入cxf jar包)
|
|
|
|
web.xml进行配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns=" http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>cxfNoSpring</display-name> <servlet> <servlet-name>cxfAutoPublish</servlet-name> <servlet-class>com.linzl.cn.cxfPublish.CxfAutoPublish</servlet-class> <!-- 数字越小,越先启动 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxfAutoPublish</servlet-name> <url-pattern>/ services/*</url-pattern> </servlet-mapping> </web-app> |
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns="
http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
id="WebApp_ID" version="2.5">
<display-name>cxf</display-name> <servlet> <description>Apache CXF Endpoint</description> <display-name>cxf</display-name> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app> |
cxf-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: beans --> <beans xmlns=" http://www.springframework.org/schema/beans" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="
http://cxf.apache.org/jaxws"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- 第一种发布方式,只是cxf的实现类不同 --> <jaxws:server id="testWebService" serviceClass="com.ws.CXFWebService" address=" /publishAddress"> <jaxws:serviceBean> <bean class="com.ws.impl.CXFWebServiceImpl" /> </jaxws:serviceBean> </jaxws:server> <!-- 第二种发布方式,只是cxf的实现类不同 --> <!-- <jaxws:endpoint id="testWebService" implementor="com.ws.impl.CXFWebServiceImpl" --> <!-- address=" / publishAddress" /> --> </beans> <!-- END SNIPPET: beans --> |
最后得到wsdl的访问地址
http://localhost:8080/项目名称/services/publishAddress?wsdl
4
、cxf 客户端调用webservice服务
A、使用直接调用,不依赖服务器端接口的方式(
可以调用不同语言编写的webserivce服务
)
|
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
// 此处的url一定要加上?wsdl Client client = = clientFactory.createClient(" http://localhost:8080/jdkPublish?wsdl ");
//
参数值如果是和服务端接口的VO一样,则必须两端VO必须在同名目录下,否则转换失败
Object[] result = client.invoke(方法名, 参数值 ); System.out.println(result[0]); |
B、依赖于服务器端接口的方式,减少调用的复杂性(
如传参数为复杂对象
)
|
生成客户端代码 详细可通过wsdl2java -help查看
wsdl2java wsdl的url
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.getInInterceptors().add(new LoggingInInterceptor());// 可选 factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());// 可选 factoryBean.setServiceClass(ApprovalService.class); factoryBean.setAddress(" http://localhost:8080/jdkPublish ");// 没问题 //客户端要有对应的webservice服务的接口类,这样就可以直接调用接口类的方法了 ApprovalService approvalService = (ApprovalService) factoryBean.create(); |
C、集成spring
依赖于服务器端接口的
方式(待补充)
|