JAVA程序 Webservice客户端调用

1、使用SOAPUI部署webservice服务端

利用现有的wsdl文件,导入到soapui中。

在soapui,右键导入的wsdl服务,选择:

 

这样,就有了soap的服务端了,然后再启用它。

在客户端中调用服务,查看服务端是否收到发送的报文。如果收到即证明服务端部署成功。

 

 

wsdl文件如下(无法导入文件,只能如此了):

<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions name="SI_OA_ESB_PROJOA_OUT_Sycn" targetNamespace="urn:telecom:mss:gc" xmlns:p2="urn:bean:service:ffcs:com" xmlns:p1="urn:telecom:mss:gc" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><wsdl:documentation/><wsp:UsingPolicy wsdl:required="true"/><wsp:Policy wsu:Id="OP_OP_OABat2Cpmis"/><wsdl:types><xsd:schema targetNamespace="urn:bean:service:ffcs:com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bean:service:ffcs:com" xmlns:ax24="http://bean.service.ffcs.com/xsd"><xsd:import namespace="http://bean.service.ffcs.com/xsd"/><xsd:element name="IF_OABat2Cpmis_ServiceResponse"><xsd:complexType><xsd:sequence><xsd:element name="return" type="ax24:PIResponseData" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="IF_OABat2Cpmis_Service"><xsd:complexType><xsd:sequence><xsd:element name="I_REQUEST" type="ax24:PIRequestData" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema><xsd:schema targetNamespace="http://bean.service.ffcs.com/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://bean.service.ffcs.com/xsd"><xsd:complexType name="PIRequestData"><xsd:sequence><xsd:element name="BASEINFO" type="PIBaseInfo" minOccurs="0" nillable="true"/><xsd:element name="MESSAGE" type="xsd:string" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType><xsd:complexType name="PIBaseInfo"><xsd:sequence><xsd:element name="MSGID" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="PMSGID" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="RETRY" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="SENDTIME" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="SERVICENAME" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="S_PROVINCE" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="S_SYSTEM" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="T_PROVINCE" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="T_SYSTEM" type="xsd:string" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType><xsd:complexType name="PIResponseData"><xsd:sequence><xsd:element name="BASEINFO" type="PIBaseInfo" minOccurs="0" nillable="true"/><xsd:element name="MESSAGE" type="PIMessage" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType><xsd:complexType name="PIMessage"><xsd:sequence><xsd:element name="REMARK" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="RESULT" type="xsd:string" minOccurs="0" nillable="true"/><xsd:element name="XMLDATA" type="xsd:string" minOccurs="0" nillable="true"/></xsd:sequence></xsd:complexType></xsd:schema></wsdl:types><wsdl:message name="p2.IF_OABat2Cpmis_ServiceRequest"><wsdl:documentation/><wsdl:part name="parameters" element="p2:IF_OABat2Cpmis_Service"/></wsdl:message><wsdl:message name="p2.IF_OABat2Cpmis_ServiceResponse"><wsdl:documentation/><wsdl:part name="parameters" element="p2:IF_OABat2Cpmis_ServiceResponse"/></wsdl:message><wsdl:portType name="SI_OA_ESB_PROJOA_OUT_Sycn"><wsdl:documentation/><wsdl:operation name="OP_OABat2Cpmis"><wsdl:documentation/><wsp:Policy><wsp:PolicyReference URI="#OP_OP_OABat2Cpmis"/></wsp:Policy><wsdl:input message="p1:p2.IF_OABat2Cpmis_ServiceRequest"/><wsdl:output message="p1:p2.IF_OABat2Cpmis_ServiceResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="SI_OA_ESB_PROJOA_OUT_SycnBinding" type="p1:SI_OA_ESB_PROJOA_OUT_Sycn"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/><wsdl:operation name="OP_OABat2Cpmis"><soap:operation soapAction="http://sap.com/xi/WebService/soap1.1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/><wsdl:input><soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/></wsdl:input><wsdl:output><soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="SI_OA_ESB_PROJOA_OUT_SycnService"><wsdl:port name="HTTP_Port" binding="p1:SI_OA_ESB_PROJOA_OUT_SycnBinding"><soap:address location="http://dgxdb901:50000/XISOAPAdapter/MessageServlet?senderParty=&amp;senderService=BC_PROXY_GC&amp;receiverParty=&amp;receiverService=&amp;interface=SI_OA_ESB_PROJOA_OUT_Sycn&amp;interfaceNamespace=urn%3Atelecom%3Amss%3Agc" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/></wsdl:port><wsdl:port name="HTTPS_Port" binding="p1:SI_OA_ESB_PROJOA_OUT_SycnBinding"><soap:address location="https://dgxdb901:50001/XISOAPAdapter/MessageServlet?senderParty=&amp;senderService=BC_PROXY_GC&amp;receiverParty=&amp;receiverService=&amp;interface=SI_OA_ESB_PROJOA_OUT_Sycn&amp;interfaceNamespace=urn%3Atelecom%3Amss%3Agc" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/></wsdl:port></wsdl:service></wsdl:definitions>

 

2、使用Eclipse生成客户端代码

在Eclipse中,选择:FileàNewàotheràWeb Service Client

将需要生成的webservice服务端地址输入,即可生成对应的服务端代码。不懂的可以百度一下。

PS:myeclipse生成的webservice客户端代码不全,缺少实现类

 

3、编写测试类

由于需要调用的服务端报文格式与一般的格式不同,报文格式如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:bean:service:ffcs:com">

   <soapenv:Header/>

   <soapenv:Body>

      <urn:IF_OABat2Cpmis_Service>

         <!--Optional:-->

         <I_REQUEST>

            <!--Optional:-->

            <BASEINFO>

               <!--Optional:-->

               <MSGID>?</MSGID>

               <!--Optional:-->

               <PMSGID>?</PMSGID>

               <!--Optional:-->

               <RETRY>?</RETRY>

               <!--Optional:-->

               <SENDTIME>?</SENDTIME>

               <!--Optional:-->

               <SERVICENAME>?</SERVICENAME>

               <!--Optional:-->

               <S_PROVINCE>?</S_PROVINCE>

               <!--Optional:-->

               <S_SYSTEM>?</S_SYSTEM>

               <!--Optional:-->

               <T_PROVINCE>?</T_PROVINCE>

               <!--Optional:-->

               <T_SYSTEM>?</T_SYSTEM>

            </BASEINFO>

            <!--Optional:-->

            <MESSAGE>?</MESSAGE>

         </I_REQUEST>

      </urn:IF_OABat2Cpmis_Service>

   </soapenv:Body>

</soapenv:Envelope>

可以看出,此类客户端的调用方式,在报文参数中是无法使用String格式的报文去调用的,需要转换为对应的xml报文格式去调用。

测试类代码如下:

package test;

 

import gc.mss.telecom.SI_OA_ESB_PROJOA_OUT_Sycn;

import gc.mss.telecom.SI_OA_ESB_PROJOA_OUT_SycnProxy;

 

import java.rmi.RemoteException;

 

import org.w3c.dom.Document;

 

import com.ffcs.service.bean.IF_OABat2Cpmis_Service;

import com.ffcs.service.bean.IF_OABat2Cpmis_ServiceResponse;

import com.ffcs.service.bean.xsd.PIBaseInfo;

import com.ffcs.service.bean.xsd.PIRequestData;

import com.ffcs.service.bean.xsd.PIResponseData;

import java.io.StringReader;  

import javax.xml.parsers.DocumentBuilder;  

import javax.xml.parsers.DocumentBuilderFactory;  

import org.w3c.dom.Document;  

import org.w3c.dom.Element;  

import org.w3c.dom.Node;  

import org.w3c.dom.NodeList;  

import org.xml.sax.InputSource;  

 

public class OAPWebservice {

         public static String MESSAGE;

         public static String MSGID;

         public static String PMSGID;

         public static String RETRY;

         public static String SENDTIME;

         public static String SERVICENAME;

         public static String S_PROVINCE;

         public static String S_SYSTEM;

         public static String T_PROVINCE;

         public static String T_SYSTEM;

        

         public static void oapservice(String xml,String url){

                   try {  

            DocumentBuilderFactory factory = DocumentBuilderFactory  

                    .newInstance();  

            DocumentBuilder builder = factory.newDocumentBuilder();  

            Document doc = builder  

                    .parse(new InputSource(new StringReader(xml)));  

            Element root = doc.getDocumentElement();

            NodeList books = root.getChildNodes();

            NodeList baseinfo = books.item(0).getChildNodes();

           

           if (books != null) {  

               for (int i = 0; i < books.getLength(); i++) {  

                    Node requestbook = books.item(i); 

                    if(requestbook.getNodeName() == "MESSAGE")

                    {

                             MESSAGE = requestbook.getFirstChild().getNodeValue().toString();

                             System.out.println(MESSAGE);

                    }

                }  

            }  

           if (baseinfo != null) {  

               for (int i = 0; i < baseinfo.getLength(); i++) {  

                    Node basebook = baseinfo.item(i);  

                    if(basebook.getNodeName() == "MSGID")

                    {

                             MSGID = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(MSGID);

                    }

                    if(basebook.getNodeName() == "PMSGID")

                    {

                             PMSGID = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(PMSGID);

                    }

                    if(basebook.getNodeName() == "RETRY")

                    {

                             RETRY = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(RETRY);

                    }

                    if(basebook.getNodeName() == "SENDTIME")

                    {

                             SENDTIME = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(SENDTIME);

                    }

                    if(basebook.getNodeName() == "SERVICENAME")

                    {

                             SERVICENAME = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(SERVICENAME);

                    }

                    if(basebook.getNodeName() == "S_PROVINCE")

                    {

                             S_PROVINCE = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(S_PROVINCE);

                    }

                    if(basebook.getNodeName() == "S_SYSTEM")

                    {

                             S_SYSTEM = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(S_SYSTEM);

                    }

                    if(basebook.getNodeName() == "T_PROVINCE")

                    {

                             T_PROVINCE = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(T_PROVINCE);

                    }

                    if(basebook.getNodeName() == "T_SYSTEM")

                    {

                             T_SYSTEM = basebook.getFirstChild().getNodeValue().toString();

                             System.out.println(T_SYSTEM);

                    }

                }  

            }

          

           SI_OA_ESB_PROJOA_OUT_SycnProxy proxy = new SI_OA_ESB_PROJOA_OUT_SycnProxy(); 

                 proxy.setEndpoint(url);

                 SI_OA_ESB_PROJOA_OUT_Sycn service =  proxy.getSI_OA_ESB_PROJOA_OUT_Sycn();

                 IF_OABat2Cpmis_Service ifService = new IF_OABat2Cpmis_Service();

                 PIRequestData irequest = new PIRequestData();

                 PIBaseInfo baseInfo = new PIBaseInfo();

                 baseInfo.setMSGID(MSGID);

                 baseInfo.setPMSGID(PMSGID);

                 baseInfo.setRETRY(RETRY);

                 baseInfo.setS_PROVINCE(S_PROVINCE);

                 baseInfo.setS_SYSTEM(S_SYSTEM);

                 baseInfo.setSENDTIME(SENDTIME);

                 baseInfo.setSERVICENAME(SERVICENAME);

                 baseInfo.setT_PROVINCE(T_PROVINCE);

                 baseInfo.setT_SYSTEM(T_SYSTEM);

                 irequest.setBASEINFO(baseInfo);

                 irequest.setMESSAGE(MESSAGE);

                 ifService.setI_REQUEST(irequest);

                 IF_OABat2Cpmis_ServiceResponse response;

                            response = service.OP_OABat2Cpmis(ifService);

                 PIResponseData responseData = response.get_return();

                 System.out.println(responseData.getBASEINFO().getS_SYSTEM());

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    

         }

 

         public static void main(String[] args) {

                   String xml = "<I_REQUEST><BASEINFO><MSGID>string</MSGID><PMSGID>string</PMSGID><RETRY>string</RETRY><SENDTIME>string</SENDTIME><SERVICENAME>string</SERVICENAME><S_PROVINCE>string</S_PROVINCE><S_SYSTEM>string</S_SYSTEM><T_PROVINCE>string</T_PROVINCE><T_SYSTEM>string</T_SYSTEM></BASEINFO><MESSAGE>string</MESSAGE></I_REQUEST>";

                   String url = "http://137.128.19.39:8011/bss/oap/proxy/OapProxymode?wsdl";

                   oapservice(xml,url);

         }

}

 

posted on 2016-04-01 10:46  混乱战天下  阅读(1072)  评论(0)    收藏  举报

导航