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=&senderService=BC_PROXY_GC&receiverParty=&receiverService=&interface=SI_OA_ESB_PROJOA_OUT_Sycn&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=&senderService=BC_PROXY_GC&receiverParty=&receiverService=&interface=SI_OA_ESB_PROJOA_OUT_Sycn&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);
}
}
浙公网安备 33010602011771号