在我们学习cxf或者axis2时,会有响应的wsdl2java.bat,可以把我们发布的webservice服务,生成一个存根stud,初学者感觉,我靠生成了这么多乱七八糟的东西,非常苦恼,那么这个stud中包括什么呢?
主要包括:stub里面有client,还有很多webservice需要的javabean,还有接口。
那么大家应该知道了 ,这些乱起八糟的东西都是什么了,其实在真正的项目中,我们生成的代码肯定不是这么臃肿的,比如服务端就是提供接口,然后接口返回一个json数组,或者返回一个xml对象就可以了,客户端会这样去得到想要的json对象,例如:
url = new URL("http://www.weather.com.cn/data/cityinfo/101010100.html");
BufferedReader bf = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
JSONObject json = JSONObject.fromObject(bf.readLine());
return json;
这么几段代码就可以了。
这样就可以得到自己想要的json对象了。而不需要那么复杂的通过wsdl2java 这样的命令去生成stud。
那么解决了大家客户端生成乱七八糟代码的问题后我们看看,服务端的发布。那么在做项目时,大多数的项目中都会用到spring管理项目,所以首选cxf来集成。
service.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
">
<jaxws:endpoint id="workFlowWebService" implementor="com.ether.workflow.webservice.WorkFlowWebServiceImpl" address="/workFlow" />
</beans>
这样就可以发布自己的web项目了。很简单是不是?其实真的一点都不复杂。当然需要在WorkFlowWebServiceImpl这个实现类和它的接口WorkFlowWebService上加上@webservice标签。
jaxws:endpoind是对jaxws:server的类的封装。所以大多数选择jaxws:endpoind标签。
这些是cxf对webservice的配置,当然还需要在spring的配置文件中引入以下cxf的配置文件
<!—还需要引入以下3个关于CXF的资源文件,这三个文件在cxf.jar中-->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<import resource="classpath:services.xml" />
需要修改web.xml文件<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
注意<url-pattern>/ services/*</url-pattern>配置,CXFServlet会拦截此类url,进行处理。上面配置的webservice将通过如下URL访问到:http://localhost:8080/cxf-ws/services/workFlow
<jaxws:endpoint >标签中address属性对应的值
cxf-ws为本项目的名称
配置完成之后,将项目部署到tomcat上
输入URL:http://localhost:8080/cxf-ws/services/ UserManager?wsdl
将会看到生成的wsdl文件
这样就发布成功了!
至于访问如下代码即可:
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(WorkFlowWebService.class);
factoryBean.setAddress("http://localhost:8080/ems_new/ws/workFlow");
WorkFlowWebService readerService = (WorkFlowWebService)factoryBean.create();
String reader = readerService.findForms();
System.out.println("Reader:"+reader);
以上是自己在项目中的理解,可能会用不妥之处,希望有意见的高手给指点,毕竟还在学习阶段,希望大家支撑!!!