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

一、发布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
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

   
   
        index.jsp
        index.html
   

   
     
        contextConfigLocation
        classpath*:spring/applicationContext-webservice.xml
   

   
        org.springframework.web.context.ContextLoaderListener
   

   
        springmvc
        org.springframework.web.servlet.DispatcherServlet
       
            contextConfigLocation
            classpath*:spring/*.xml
       
        2
   
     
        springmvc
        *.ac
   


   
   
        CXFServlet
        org.apache.cxf.transport.servlet.CXFServlet
        1
   
   
        CXFServlet
        /ws/*
   



#编写一个提供服务的接口
/**
*
@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"?>
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">
resource="classpath:META-INF/cxf/cxf.xml"/>
resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

id="userService" class="webservice.demo.UserService">
id="userWebServiceImpl" class="webservice.demo.UserWebServiceImpl">


<jaxws:endpoint implementor="#userWebServiceImpl" address="/userWebService">jaxws:endpoint>



#浏览器访问wsdl   网址为  域名+CXFServlet 映射的路径+ spring配置文件中 元素配置的address属性值+?wsdl
Spring 集成CXF框架发布Webservice服务 和 使用jdk生成Webservice clinet_第1张图片

二、使用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
  1. -s(src):在当前路径下的e盘文件夹中生成客户端代码  
  2. -p(package):定义客户端代码的包名  
  3. -keep 保留.class文件  

#生成的文件目录为
Spring 集成CXF框架发布Webservice服务 和 使用jdk生成Webservice clinet_第2张图片

#编写一个测试类来调用生成的一堆代码
public class InvokTest {
public static void main(String[] agrs){
UserWebService userWebService = new UserWebService_Service().getUserWebServiceImplPort();
User user = userWebService.getUserByUserId(1);
System.out.println(user);
}
}



你可能感兴趣的:(java,web,java框架)