webservice整合spring cxf

下载cxf包,把他里面的包都添加进lib文件夹中。

创建一个接口。添加@WebService注解

@WebService
public interface HelloWorld {

    String sayHi(@WebParam(name="text")String text);
    String sayHiToUser(User user);
    String[] SayHiToUserList(List<User> userList);
}

创建接口的实现类,也添加@WebService注解,给他一个名称:boy

@WebService(serviceName="boy")
public class HelloWorldImpl implements HelloWorld {

    Map<Integer, User> users = new LinkedHashMap<Integer, User>();

    public String sayHi(String text) {
        return "Hello " + text;
    }

    public String sayHiToUser(User user) {
        users.put(users.size() + 1, user);
        return "Hello " + user.getName();
    }

    public String[] SayHiToUserList(List<User> userList) {
        String[] result = new String[userList.size()];
        int i = 0;
        for (User u : userList) {
            result[i] = "Hello " + u.getName();
            i++;
        }
        return result;
    }

}

 

User实体类:

public class User {

    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}

服务端代码:

public class webServiceApp {
      public static void main(String[] args) {
          System.out.println("web service start");
          HelloWorldImpl implementor= new HelloWorldImpl();
          String address="http://localhost:8000/helloWorld";
          Endpoint.publish(address, implementor);
          System.out.println("web service started");
 }
}

客户端代码:有集成spring和没集成的

public class HelloWorldClient {
    public static void main(String[] args) {
        
        //集成spring和cxf
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld client1 = (HelloWorld) context.getBean("client1");
        User user1 = new User();
        user1.setName("Tony");
        user1.setAge(20);
        User user2 = new User();
        user2.setName("freeman");
        user2.setAge(50);
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);
        // String[] res = client1.SayHiToUserList(userList);
        // System.out.println(res[0]);
        // System.out.println(res[1]);
        String sayHi = client1.sayHi("good");
        System.out.println(sayHi);
        
        // HelloWorld2 client2 = (HelloWorld2) context.getBean("client2");
        // User user3 = new User();
        // user3.setName("Jerry");
        // user3.setAge(20);
        // String user = client2.sayHiToUser(user3);
        // System.out.println(user);
        
        
        //没有集成
        JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
        svr.setServiceClass(HelloWorld.class);
        svr.setAddress("http://localhost:8000/helloWorld");
        HelloWorld hw = (HelloWorld) svr.create();
        User user = new User();
        user.setName("Tony");
        System.out.println(hw.sayHi("ffff"));

    
    }
}

打印的结果是:

Hello good

Hello ffff

 

web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <display-name>cxf</display-name>
 <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>


                <context-param>
                          <param-name>contextConfigLocation</param-name>
                          <param-value>classpath*:applicationContext.xml</param-value>
                 </context-param>
 
              <listener>
                      <listener-class>
                              org.springframework.web.context.ContextLoaderListener
                      </listener-class>
              </listener>

                <listener>
                    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
                </listener>
 

              <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>/*</url-pattern>
               </servlet-mapping>
</web-app>

applicationContext.xml的配置,这个文件是放在资源文件resources下的,他在项目中的路径是在classes里面的。我在这里配置了两个站点。都是可以的。

<?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.xsd
                       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    
    
    <!-- 发布一个站点 -->
    <jaxws:endpoint id="boy" implementor="com.cs.webservice.HelloWorldImpl"
        address="/aaa" />

    <bean id="client1" class="com.cs.webservice.HelloWorld"
        factory-bean="clientFactory1" factory-method="create" />

    <bean id="clientFactory1" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="com.cs.webservice.HelloWorld" />
        <property name="address" value="http://localhost:8000/helloWorld/aaa" />
    </bean>
    
    <!-- 第二个站点 -->
<!--     <jaxws:endpoint id="orange" implementor="com.cs.webservice.HelloWorldImpl2"
        address="/bbb" />

    <bean id="client2" class="com.cs.webservice.HelloWorld2"
        factory-bean="clientFactory2" factory-method="create" />

    <bean id="clientFactory2" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="com.cs.webservice.HelloWorld2" />
        <property name="address" value="http://localhost:8080/cxfwebservicespring/bbb" />
    </bean> -->
</beans>
<property name="address" value="http://localhost:8000/helloWorld/aaa" />
aaa前面的路径必须与发布的String address="http://localhost:8000/helloWorld";路径相同。
posted @ 2015-02-03 15:44  Hong_Jerry  阅读(180)  评论(0编辑  收藏  举报