最近需要在项目中增加webservice接口,供三方调用,下面就把集成的方法展示如下,供大家参考:
第一步:服务端的发布;
1:配置web.xml文件,添加cxf的servlet
<servlet> <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>/webService/*</url-pattern> </servlet-mapping>
2:maven导入需要的cxf jar包
<properties> <cxf.version>3.2.1</cxf.version> </properties> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>${cxf.version}</version> </dependency>
如果不是maven项目,一般的项目的话,就下载相应的jar包并导入项目中。
3.导入wsdljar包
<dependency> <groupId>soap.public</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.3</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/wsdl4j-1.6.3.jar</systemPath> </dependency>
wsdl4j-1.6.3.jar 包放在了工程的lib目录下,然后引用了本地lib中的此jar包,此处也可以直接从maven仓库中引用。
4,在增加如下的配置文件,我的命名为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" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 引入CXF配置文件,低版本还需引入其他两个文件 --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <jaxws:endpoint id="ssWebService" address="/ssWebService" implementor="com.webservice.service.impl.SsWebServiceImpl" /> </beans>
然后在spring配置文件中,导入cxf-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <context:component-scan base-package="com.webservice.*"/> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 传播行为 --> <tx:method name="import*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <!-- 切面 --> <aop:config> <aop:pointcut id="operation" expression="execution(* com.webservice.*.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="operation" /> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.webservice.*.service*.*.*(..))" /> </aop:config> <import resource="classpath:config/cxf-servlet.xml"/> </beans>
最后建立webservice服务端的代码
接口类和实现类代码
package com.webservice.service; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import com.webservice.data.pojo.ExcelUser; @WebService @SOAPBinding(style = Style.RPC) public interface SsWebService { public ExcelUser getUser(@WebParam(name="loginName") String loginName,@WebParam(name="password") String password); }
package com.webservice.service.impl; import javax.jws.WebService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.webservice.data.pojo.ExcelUser; import com.webservice.data.service.LoginService; import com.webservice.service.SsWebService; @Transactional @Service @WebService(endpointInterface = "com.webservice.service.SsWebService", serviceName = "SsWebService") public class SsWebServiceImpl implements SsWebService { @Autowired private LoginService loginService; @Override public ExcelUser getUser(String loginName, String password) { return loginService.findUserByNameAndPwd(loginName, password); } }
到此服务端已建立完成,访问地址:http://127.0.0.1:8080/工程名/webService/ssWebService?wsdl即可看到发布的webService接口内容。