CXF发布在Web服务

1、下载apache-cxf-3.1.4,将jar引入新工程中。

2、People.java

package com.soap.server;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;
/**
 * 该类为Web Service中的参数、返回值类型,故需要使用JAXB注解告诉CXF如何在XML和Java Object之间处理,
 * 因为,SOAP消息格式包装的是一段XML代码,无论是服务器端,还是客户端,
 * 在接收到SOAP消息时,都需要将XML转化为Java Object,
 * 在发送SOAP消息时,需要将Java Object转化为XML。
 * */
@XmlRootElement(name = "People")
public class People {
    private Long id;
    private String name;
    private Date birthday;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

 

3、PeopleService.java

package com.soap.server;

import java.util.List;
import javax.jws.WebService;

@WebService
public interface PeopleService {
    
    public String add(People people);
    
    public String del(People people);
    
    public String modify(People people);
    
    public People getOne(Long id);
    
    public List<People> getList(String name);
}

 

4、PeopleServiceImpl.java

package com.soap.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.jws.WebService;


@WebService(endpointInterface="com.soap.server.PeopleService")
public class PeopleServiceImpl implements PeopleService {

    @Override
    public String add(People people) {
        // TODO Auto-generated method stub
        System.out.println("ADD:"+people.getId()+","+people.getName()+","+people.getBirthday());
        return "ADD SUCCESS";
    }

    @Override
    public String del(People people) {
        // TODO Auto-generated method stub
        System.out.println("DEL:"+people.getId()+","+people.getName());
        return "DEL SUCCESS";
    }

    @Override
    public String modify(People people) {
        // TODO Auto-generated method stub
        System.out.println("MODIFY:"+people.getId()+","+people.getName());
        return "MODIFY SUCCESS";
    }

    @Override
    public People getOne(Long id){
        // TODO Auto-generated method stubSystem.out.println("QRY BEGIN");
        People people=new People();
        people.setId(4L);
        people.setName("Name-004");
        people.setBirthday(new Date());
        return people;
        
    }
    @Override
    public List<People> getList(String name){
        // TODO Auto-generated method stub
        List<People> list=new ArrayList<People>();
        People people0=new People();
        People people1=new People();
        people0.setId(5L);
        people0.setName(name+"-005");
        people0.setBirthday(new Date());
        people1.setId(6L);
        people1.setName(name+"-006");
        people1.setBirthday(new Date());
        list.add(people0);
        list.add(people1);
        return list;
    }
}

 

5、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <servlet>
      <servlet-name>SpringCXFServlet</servlet-name>
      <servlet-class>com.cxf.servlet.MySpringCXFNonSpringServlet</servlet-class>
      <init-param>
      <param-name>/peopleService</param-name>
      <param-value>com.soap.server.PeopleServiceImpl</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringCXFServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

6、写一个类覆盖org.apache.cxf.transport.servlet.CXFNonSpringServlet的loadBus方法指定BUS

package com.cxf.servlet;

import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.xml.ws.Endpoint;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;

public class MySpringCXFNonSpringServlet extends CXFNonSpringServlet {
    private static final long serialVersionUID = 1930791254280865620L;

    @Override
    public void loadBus(ServletConfig servletConfig) {
        super.loadBus(servletConfig);
        Bus bus = this.getBus();
        BusFactory.setDefaultBus(bus);
        // 获取在web.xml中配置的要发布的所有的Web服务实现类并发布Web服务
        Enumeration<String> enumeration = getInitParameterNames();
        while (enumeration.hasMoreElements()) {
            String key = enumeration.nextElement();
            String value = getInitParameter(key);
            try {
                Class clazz = Class.forName(value);
                try {
                    Endpoint.publish(key, clazz.newInstance());
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

 

7、部署工程,若Web应用上下文是/SpringCXFService,

则访问http://127.0.0.1:8080/SpringCXFService/services/peopleService?wsdl

  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.soap.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="PeopleServiceImplService" targetNamespace="http://server.soap.com/">
- <wsdl:types>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.soap.com/" elementFormDefault="unqualified" targetNamespace="http://server.soap.com/" version="1.0">
  <xs:element name="People" type="tns:people" /> 
  <xs:element name="add" type="tns:add" /> 
  <xs:element name="addResponse" type="tns:addResponse" /> 
  <xs:element name="del" type="tns:del" /> 
  <xs:element name="delResponse" type="tns:delResponse" /> 
  <xs:element name="getList" type="tns:getList" /> 
  <xs:element name="getListResponse" type="tns:getListResponse" /> 
  <xs:element name="getOne" type="tns:getOne" /> 
  <xs:element name="getOneResponse" type="tns:getOneResponse" /> 
  <xs:element name="modify" type="tns:modify" /> 
  <xs:element name="modifyResponse" type="tns:modifyResponse" /> 
- <xs:complexType name="del">
- <xs:sequence>
  <xs:element minOccurs="0" name="arg0" type="tns:people" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="people">
- <xs:sequence>
  <xs:element minOccurs="0" name="birthday" type="xs:dateTime" /> 
  <xs:element minOccurs="0" name="id" type="xs:long" /> 
  <xs:element minOccurs="0" name="name" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="delResponse">
- <xs:sequence>
  <xs:element minOccurs="0" name="return" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="add">
- <xs:sequence>
  <xs:element minOccurs="0" name="arg0" type="tns:people" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="addResponse">
- <xs:sequence>
  <xs:element minOccurs="0" name="return" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="getOne">
- <xs:sequence>
  <xs:element minOccurs="0" name="arg0" type="xs:long" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="getOneResponse">
- <xs:sequence>
  <xs:element minOccurs="0" name="return" type="tns:people" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="getList">
- <xs:sequence>
  <xs:element minOccurs="0" name="arg0" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="getListResponse">
- <xs:sequence>
  <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:people" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="modify">
- <xs:sequence>
  <xs:element minOccurs="0" name="arg0" type="tns:people" /> 
  </xs:sequence>
  </xs:complexType>
- <xs:complexType name="modifyResponse">
- <xs:sequence>
  <xs:element minOccurs="0" name="return" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>
  </xs:schema>
  </wsdl:types>
- <wsdl:message name="addResponse">
  <wsdl:part element="tns:addResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="delResponse">
  <wsdl:part element="tns:delResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="getOneResponse">
  <wsdl:part element="tns:getOneResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="getOne">
  <wsdl:part element="tns:getOne" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="del">
  <wsdl:part element="tns:del" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="modifyResponse">
  <wsdl:part element="tns:modifyResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="getListResponse">
  <wsdl:part element="tns:getListResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="getList">
  <wsdl:part element="tns:getList" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="modify">
  <wsdl:part element="tns:modify" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="add">
  <wsdl:part element="tns:add" name="parameters" /> 
  </wsdl:message>
- <wsdl:portType name="PeopleService">
- <wsdl:operation name="del">
  <wsdl:input message="tns:del" name="del" /> 
  <wsdl:output message="tns:delResponse" name="delResponse" /> 
  </wsdl:operation>
- <wsdl:operation name="add">
  <wsdl:input message="tns:add" name="add" /> 
  <wsdl:output message="tns:addResponse" name="addResponse" /> 
  </wsdl:operation>
- <wsdl:operation name="getOne">
  <wsdl:input message="tns:getOne" name="getOne" /> 
  <wsdl:output message="tns:getOneResponse" name="getOneResponse" /> 
  </wsdl:operation>
- <wsdl:operation name="getList">
  <wsdl:input message="tns:getList" name="getList" /> 
  <wsdl:output message="tns:getListResponse" name="getListResponse" /> 
  </wsdl:operation>
- <wsdl:operation name="modify">
  <wsdl:input message="tns:modify" name="modify" /> 
  <wsdl:output message="tns:modifyResponse" name="modifyResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="PeopleServiceImplServiceSoapBinding" type="tns:PeopleService">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="add">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="add">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="addResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:operation name="del">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="del">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="delResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:operation name="getOne">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="getOne">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getOneResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:operation name="getList">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="getList">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getListResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:operation name="modify">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="modify">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="modifyResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="PeopleServiceImplService">
- <wsdl:port binding="tns:PeopleServiceImplServiceSoapBinding" name="PeopleServiceImplPort">
  <soap:address location="http://127.0.0.1:8080/SpringCXFService/services/peopleService" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

 

posted @ 2015-12-31 17:00  zxczxczxc123  阅读(212)  评论(0编辑  收藏  举报