您的位置:首页 > 编程语言 > Java开发

Spring 集成CXF框架发布Webservice服务 和 使用jdk生成Webservice clinet

2016-06-16 13:10 986 查看
一、发布Webservice服务
# 依赖 jar

commons-logging-1.1.1.jar
asm-3.3.1.jar
cxf-2.7.5.jar

//httpasyncclient-4.0-beta3.jar

httpclient-4.2.1.jar

httpcore-4.2.2.jar

//httpcore-nio-4.2.2.jar

neethi-3.0.2.jar

org.springframework.aop-3.1.3.RELEASE.jar

org.springframework.asm-3.1.3.RELEASE.jar

org.springframework.beans-3.1.3.RELEASE.jar

org.springframework.context-3.1.3.RELEASE.jar

org.springframework.core-3.1.3.RELEASE.jar

org.springframework.expression-3.1.3.RELEASE.jar

org.springframework.web-3.1.3.RELEASE.jar

org.springframework.web.servlet-3.1.3.RELEASE.jar

stax2-api-3.1.1.jar

woodstox-core-asl-4.2.0.jar

wsdl4j-1.6.3.jar

//wss4j-1.6.10.jar

xmlschema-core-2.0.3.jar

//xmlsec-1.5.4.jar
# download url
http://cxf.apache.org/download.html
http://www.springsource.org/download/community

#配置web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <!-- 默认首页定义 -->

    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>index.html</welcome-file>

    </welcome-file-list>

    <!--一般配置了DispatcherServlet就不需要配置ContextLoaderListener

        CXF的核心控制器要依赖Spring的ContextLoaderListner配置方式,如果配置了CXFServlet,要使用ContextLoaderListener 方式才能生效

        而SpringMVC用的是DiapacherServlet的配置方式

        为了防止容器重复加载bean, 拆分配置文件:

        applicationContext-hibernate-dao.xml,applicationContext-mvc.xml(DiapacherServlet配置方式)中配置普通的bean和Controller组件

        applicationContext-webservice.xml(ContextLoaderListner配置方式)中配置CXF。

    -->

      <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:spring/applicationContext-webservice.xml</param-value>

    </context-param>

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <servlet>

        <servlet-name>springmvc</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>classpath*:spring/*.xml</param-value>

        </init-param>

        <load-on-startup>2</load-on-startup>

    </servlet>

    <servlet-mapping> 

        <servlet-name>springmvc</servlet-name>

        <url-pattern>*.ac</url-pattern>

    </servlet-mapping>

    <!--CXF核心控制器-->

    <servlet>

        <servlet-name>CXFServlet</servlet-name>

        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>CXFServlet</servlet-name>

        <url-pattern>/ws/*</url-pattern>

    </servlet-mapping>

</web-app>

#编写一个提供服务的接口

/**
*
@WebService 必须,(name="UserService")可选,配置Service的名称,默认为类名。targetNamespace(如果不写,wsdl上面就不会生成接口上面配置的@WebResult类型)可选,默认为http:// package的倒序,
@WebResult 可选,配置方法的返回值在WSDL的名称,CXF默认为return。
@WebParam 可选,配置参数在WSDL的名称,CX比较笨,不会反射,默认为arg0,arg1....
@WebMethod 可选,默认接口的所有方法均输出为WebService。 有一个方法有此注释,则其他无注释的方法非WebService。
*/
@WebService(targetNamespace = "www.zhong.webservice.demo")
public interface UserWebService {
@WebMethod(operationName = "getUserByUserId")
@WebResult(name ="User")
public User getUser(@WebParam(name = "userId") Integer userId);

@WebMethod()
public void createUser(@WebParam(name = "name")String name,@WebParam(name = "age")Integer age);
}


#接口的实现类

/**
*@WebService(endpointInterface="")  可选,指定实现的接口。接口是对外的,必须通过注释来声明,而Impl是内部的,声明是可选的。
*/
@WebService(serviceName="UserWebService",endpointInterface = "webservice.demo.UserWebService",targetNamespace = "www.zhong.webservice.demo")
public class UserWebServiceImpl implements UserWebService{

private UserService userService;
public void setUserService(UserService userService) { //用于spirng注入bean
this.userService = userService;
}
public User getUser(Integer userId) {
return userService.getUser(userId);
}
public void createUser(String name, Integer age) {
userService.createUser(name,age);
}
}


#编写spring 配置文件 applicationContext-webservice.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:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" default-autowire="byName" default-lazy-init="false">
<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"/>

<bean id="userService" class="webservice.demo.UserService"></bean>
<bean id="userWebServiceImpl" class="webservice.demo.UserWebServiceImpl">
<!--<property name="userService" ref="userService"></property> 开启了autowire 自动装配,可以不用显式声明-->
</bean>
<jaxws:endpoint  implementor="#userWebServiceImpl" address="/userWebService"></jaxws:endpoint>

<!--<jaxws:endpoint id="UserWebService" implementor="webservice.demo.UserWebServiceImpl"  address="/userWebService"/>-->
</beans>


#浏览器访问wsdl   网址为  域名+CXFServlet 映射的路径+ spring配置文件中 <jaxws:endpoint> 元素配置的address属性值+?wsdl



二、使用JDK1.6的wsimport.exe产生客户端代码

#命令行窗口输入  (如果配置了java path,可以在任意路径下输入此命令,否则要到jdk/bin 目录下)  
C:\Program Files\Java\jdk1.6.0_39\bin>wsimport  -keep -p zhong.webservice.clinet  -s e:\
 http://localhost:8080/ws/userWebService?wsdl

-s(src):在当前路径下的e盘文件夹中生成客户端代码  
-p(package):定义客户端代码的包名  
-keep 保留.class文件  

#生成的文件目录为



#编写一个测试类来调用生成的一堆代码

public class InvokTest {
public static void main(String[] agrs){
UserWebService userWebService = new UserWebService_Service().getUserWebServiceImplPort();
User user = userWebService.getUserByUserId(1);
System.out.println(user);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: