• Axis2学习的第一天


    按照下面,分别建2个工程,一个client(客户端),一个server(服务端)

    先实现服务端:

    1、编写services.xml文件,该文件是放在aar文件里的META-INF目录下的:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- This file was auto-generated from WSDL -->
    <!-- by the Apache Axis2 version: 1.4.1  Built on : Aug 19, 2008 (10:13:39 LKT)
         <parameter name="useOriginalwsdl">false</parameter>
         <parameter name="modifyUserWSDLPortAddress">true</parameter>
     -->
    <serviceGroup>
        <service name="axis2Service">    
            <description>  
               This is a sample Web Service.  
            </description>  
            <!-- // ServiceClass指定Java Class的位置,即实现服务的类。  --> 
            <parameter name="ServiceClass" locked="false">com.study.axis2.service.impl.Axis2ServiceImpl</parameter>  
            <!-- // operation 与Java Class中方法名对应。  -->   
            <operation name="user">  
                <!-- // messageReceiver看下文注解。    --> 
                   <messageReceiver class="com.study.axis2.receive.Axis2MessageReceiverInOut"/>  
            </operation>  
        </service>  
    </serviceGroup>

    2、编写Axis2ServiceImpl类:

    package com.study.axis2.service.impl;
    
    import com.study.axis2.domain.User;
    import com.study.axis2.domain.UserResponse;
    import com.study.axis2.service.Axis2Service;
    
    public class Axis2ServiceImpl implements Axis2Service {
    
        public UserResponse user(User user) {
            // 将in转换为String。
            int userId = user.getUserId();
            String userName = user.getUserName();
            
            System.out.println("USER ID : " + userId + "; USER NAME : " + userName);
            
            UserResponse response = new UserResponse();
            response.setRspCode("0000");
            response.setRspDesc("SUCCESS");
            
            return response;
        }
    
    }

    3、编写User和UserResponse类:

    package com.study.axis2.domain;
    
    public class User {
        
        private int userId;
        private String userName;
        
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
    }
    package com.study.axis2.domain;
    
    public class UserResponse {
        
        private String rspCode;
        private String rspDesc;
        
        public String getRspCode() {
            return rspCode;
        }
        public void setRspCode(String rspCode) {
            this.rspCode = rspCode;
        }
        public String getRspDesc() {
            return rspDesc;
        }
        public void setRspDesc(String rspDesc) {
            this.rspDesc = rspDesc;
        }
    }

    4、编写Axis2MessageReceiverInOut类,用来接收报文的,实际上用Axis2ServiceImpl类来处理业务逻辑,但为了省事,略,直接在InOut类里编写了响应报文:

    package com.study.axis2.receive;
    
    import java.io.ByteArrayInputStream;
    import java.util.Iterator;
    
    import org.apache.axiom.om.OMAbstractFactory;
    import org.apache.axiom.om.OMElement;
    import org.apache.axiom.om.OMFactory;
    import org.apache.axiom.om.OMNamespace;
    import org.apache.axiom.om.impl.builder.StAXOMBuilder;
    import org.apache.axiom.soap.SOAPBody;
    import org.apache.axiom.soap.SOAPEnvelope;
    import org.apache.axiom.soap.SOAPFactory;
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.context.MessageContext;
    import org.apache.axis2.receivers.AbstractInOutMessageReceiver;
    
    public class Axis2MessageReceiverInOut extends AbstractInOutMessageReceiver{
        private static String ENCODEING = "UTF-8";
        private static String NAMING_SPACE = "http://impl.service.axis2.study.com";
    
        @Override
        public void invokeBusinessLogic(MessageContext envMsg, MessageContext newEnvMsg)
                throws AxisFault {
            System.out.println("------------------------------------");
            String body = envMsg.getEnvelope().getBody().toString();
            System.out.println("request body1 : " + body);
            
            //Axis2Service axis2 = new Axis2ServiceImpl();
            
            StringBuffer soapRequestData = new StringBuffer();
            soapRequestData.append("<userResponse>");
            soapRequestData.append("<rspCode>0000</rspCode>");
            soapRequestData.append("<rspDesc>SUCCESS</rspDesc>");
            soapRequestData.append("</userResponse>");
            
            SOAPEnvelope env = toEnvelope(soapRequestData.toString());
            
            newEnvMsg.setEnvelope(env);
        }
        
        public static SOAPEnvelope toEnvelope(String sourceXml)
        {
            String xmlBody = sourceXml;
    
            OMFactory of = OMAbstractFactory.getOMFactory();
            OMNamespace bname = of.createOMNamespace(NAMING_SPACE, "");
    
            SOAPFactory s12f = OMAbstractFactory.getSOAP12Factory();
            SOAPEnvelope s12e = s12f.getDefaultEnvelope();
    
            try
            {
                byte[] bytes = xmlBody.getBytes(ENCODEING);
                ByteArrayInputStream is = new ByteArrayInputStream(bytes);
                
                StAXOMBuilder builder = new StAXOMBuilder(is);
                
                OMElement elementBody = builder.getDocumentElement();
                //elementBody.setNamespace(bname);
                //addNameSpacePrefix(elementBody, bname);
                
                SOAPBody s12b = s12e.getBody();
                s12b.addChild(elementBody);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return s12e;
        }
    
        public static OMElement addNameSpacePrefix(OMElement element,
                OMNamespace prefix)
        {
            if (element.getChildElements() != null)
            {
                Iterator<OMElement> it = element.getChildElements();
                element.setNamespace(prefix);
                while (it.hasNext())
                {
                    OMElement childelement = (OMElement) it.next();
                    childelement.setNamespace(prefix);
    
                    if ((childelement.getChildElements() == null)
                            || (!childelement.getChildElements().hasNext()))
                        continue;
                    addChildNameSpacePrefix(childelement.getChildElements(), prefix);
                }
            }
    
            return element;
        }
    
        public static void addChildNameSpacePrefix(Iterator element,
                OMNamespace prefix)
        {
            if (element != null)
            {
                while (element.hasNext())
                {
                    OMElement childelement = (OMElement) element.next();
    
                    childelement.setNamespace(prefix);
                    if ((childelement.getChildElements() == null)
                            || (!childelement.getChildElements().hasNext()))
                        continue;
                    addChildNameSpacePrefix(childelement.getChildElements(), prefix);
                }
            }
        }
    
    }

    5、将该类和services.xml文件都放在axis2service.aar下 ,并在WEB-INF/services/services.list文件下增加axis2service.aar:

    axis2service.aar
    version-1.6.2.aar

    服务端编写好,发布,http://localhost:8082/axis2_server_150701/services/axis2Service?wsdl

      <?xml version="1.0" encoding="UTF-8" ?> 
    - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://impl.service.axis2.study.com" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.service.axis2.study.com">
      <wsdl:documentation>axis2Service</wsdl:documentation> 
    - <wsdl:types>
    - <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.service.axis2.study.com">
    - <xs:element name="user">
    - <xs:complexType>
    - <xs:sequence>
      <xs:element minOccurs="0" name="user" nillable="true" type="xs:anyType" /> 
      </xs:sequence>
      </xs:complexType>
      </xs:element>
    - <xs:element name="userResponse">
    - <xs:complexType>
    - <xs:sequence>
      <xs:element minOccurs="0" name="return" nillable="true" type="xs:anyType" /> 
      </xs:sequence>
      </xs:complexType>
      </xs:element>
      </xs:schema>
      </wsdl:types>
    - <wsdl:message name="userRequest">
      <wsdl:part name="parameters" element="ns:user" /> 
      </wsdl:message>
    - <wsdl:message name="userResponse">
      <wsdl:part name="parameters" element="ns:userResponse" /> 
      </wsdl:message>
    - <wsdl:portType name="axis2ServicePortType">
    - <wsdl:operation name="user">
      <wsdl:input message="ns:userRequest" wsaw:Action="urn:user" /> 
      <wsdl:output message="ns:userResponse" wsaw:Action="urn:userResponse" /> 
      </wsdl:operation>
      </wsdl:portType>
    - <wsdl:binding name="axis2ServiceSoap11Binding" type="ns:axis2ServicePortType">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
    - <wsdl:operation name="user">
      <soap:operation soapAction="urn:user" style="document" /> 
    - <wsdl:input>
      <soap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output>
      <soap:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:binding name="axis2ServiceSoap12Binding" type="ns:axis2ServicePortType">
      <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
    - <wsdl:operation name="user">
      <soap12:operation soapAction="urn:user" style="document" /> 
    - <wsdl:input>
      <soap12:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output>
      <soap12:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:binding name="axis2ServiceHttpBinding" type="ns:axis2ServicePortType">
      <http:binding verb="POST" /> 
    - <wsdl:operation name="user">
      <http:operation location="user" /> 
    - <wsdl:input>
      <mime:content type="application/xml" part="parameters" /> 
      </wsdl:input>
    - <wsdl:output>
      <mime:content type="application/xml" part="parameters" /> 
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:service name="axis2Service">
    - <wsdl:port name="axis2ServiceHttpSoap11Endpoint" binding="ns:axis2ServiceSoap11Binding">
      <soap:address location="http://localhost:8082/axis2_server_150701/services/axis2Service.axis2ServiceHttpSoap11Endpoint/" /> 
      </wsdl:port>
    - <wsdl:port name="axis2ServiceHttpSoap12Endpoint" binding="ns:axis2ServiceSoap12Binding">
      <soap12:address location="http://localhost:8082/axis2_server_150701/services/axis2Service.axis2ServiceHttpSoap12Endpoint/" /> 
      </wsdl:port>
    - <wsdl:port name="axis2ServiceHttpEndpoint" binding="ns:axis2ServiceHttpBinding">
      <http:address location="http://localhost:8082/axis2_server_150701/services/axis2Service.axis2ServiceHttpEndpoint/" /> 
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>

    axis2可以访问http://localhost:8082/axis2_server_150701/services/listServices来查看发布了哪些接口:

    以上服务端已完全搭好,现编写客户端client,服务端增加个User类:

    package com.study.axis2.client;
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.RequestEntity;
    
    import com.study.axis2.domain.User;
    
    
    public class Axis2Client {
        private static String url = "http://localhost:8082/axis2_server_150701/services/axis2Service";
    
        public static void main(String[] args) {
        
            User user = new User();
            user.setUserId(11111);
            user.setUserName("66666");
            
            HttpClient client = new HttpClient();
            PostMethod method = new PostMethod(url);
            StringBuffer soapRequestData = new StringBuffer();
            soapRequestData.append("<?xml version="1.0" encoding="utf-8"?>");
            soapRequestData
                    .append("<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance""
                            + " xmlns:xsd="http://www.w3.org/2001/XMLSchema""
                            + " xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">");
            soapRequestData.append("<soap12:Body>");
            soapRequestData.append("<user xmlns="http://impl.service.axis2.study.com">");
            soapRequestData.append("<userId>" + user.getUserId() + "</userId>");
            soapRequestData.append("<userName>" + user.getUserName() + "</userName>");
            soapRequestData.append("</user>");
            soapRequestData.append("</soap12:Body>");
            soapRequestData.append("</soap12:Envelope>");
            
            String xml = soapRequestData.toString();
            
            byte[] b;
            
            try
            {
                b = xml.getBytes("utf-8");
                
                System.out.println("request : " + xml);
                InputStream is = new ByteArrayInputStream(b, 0, b.length);
                RequestEntity re = new InputStreamRequestEntity(is, b.length, "application/soap+xml; charset=utf-8");
                method.setRequestEntity(re);
                
                client.executeMethod(method);
                String response = method.getResponseBodyAsString();
                System.out.println("response : " + response);
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
        
    }

    执行客户端代码,输出(输出结果内容为xml,稍微format下):

    request : 
    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
        <soap12:Body>
            <user xmlns="http://impl.service.axis2.study.com">
                <userId>11111</userId>
                <userName>yff</userName>
            </user>
        </soap12:Body>
    </soap12:Envelope>
    response : 
    <?xml version='1.0' encoding='utf-8'?>
    <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
        <soapenv:Body>
            <userResponse>
                <rspCode>0000</rspCode>
                <rspDesc>SUCCESS</rspDesc>
            </userResponse>
        </soapenv:Body>
    </soapenv:Envelope>
  • 相关阅读:
    react 调用webIm
    css样式问题解决
    学习animejs
    vue,在模块中动态添加dom节点,并监听
    vue 关于solt得用法
    vue-cli 安装过程出现错误
    处理参数中存在多个连续空格,只显示一个空格,复制后搜索不到得问题
    http StatusCode(状态码)
    修改表单小技巧
    关于swiper中包含表单元素的bug
  • 原文地址:https://www.cnblogs.com/yanff/p/4690242.html
Copyright © 2020-2023  润新知