簡體   English   中英

如何從Java訪問SOAP Web服務URL端點

[英]How to access a SOAP Web Service URL Endpoint from Java

如何從Java訪問SOAP Web服務URL端點?

我一直在尋找一個具體的例子有一段時間了,但是卻無處可尋。 不幸的是,我在使用的這種情況下無法使用我首選的REST方法,因此必須測試基於SOAP的方法。

設置是,例如,在www.website.com/soap.wsdl有一個SOAP WSDL文件。 我正在嘗試從CreateData端點發送和接收數據。

當我將WSDL文件添加到SoapUI軟件進行測試時,這將生成以下SOAP消息模板;

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tic="{redacted}">
   <soapenv:Header/>
   <soapenv:Body>
      <tic:CreateData>
         <tic:request>{"testKey":"testValue"}</tic:request>
      </tic:CreateData>
   </soapenv:Body>
</soapenv:Envelope>

(我添加了測試JSON數據)

我似乎無法弄清楚的是如何將該在SoapUI中正常工作的請求轉換為功能正常的測試Java代碼。

當我將WSDL導入我的IDE時,它將生成一個看起來像這樣的Java文件。

import javax.jws.WebService;

@WebService(serviceName = "{redacted}", portName = "{redacted}", endpointInterface = "{redacted}", targetNamespace = "{redacted}", wsdlLocation = "WEB-INF/wsdl/null/null.wsdl")
public class NewWebServiceFromWSDL {

    public java.lang.String createData(java.lang.String request) {
        //TODO implement this method
        throw new UnsupportedOperationException("Not implemented yet.");
    }

}

自然,我現在不知道下一步該怎么做。 如何使用Java創建SOAP信封? 我本來希望看到為諸如setSOAPEnvelopeHeader(),setSOAPEnvelopeBody(),setSOAPEnvelopeVariableRequest()等(或類似)之類的東西生成的一些方法。

然后,一旦創建了SOAP Envelope對象(無論如何完成),那么我該如何實際發送消息並處理響應呢?

感覺困惑...

這是調用SOAP的殘酷方式,但是它可以工作,並且很容易上手。 然后,您需要進行一些修改以處理SOAPEnvelope / SOAPBody,僅此而已。

package xml;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;

import com.sun.xml.internal.ws.encoding.soap.SOAP12Constants;


public class SOAPCall {

public static void main(String[] args) throws UnsupportedOperationException, SOAPException, IOException {

    String endPoint = "URL";

    SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
    SOAPConnection soapConnection = soapConnectionFactory.createConnection();

    String soapString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tic=\"{redacted}\">"
            + "<soapenv:Header/><soapenv:Body>"
            + "<tic:CreateData><tic:request>{\"testKey\":\"testValue\"}</tic:request>"
            + "</tic:CreateData></soapenv:Body></soapenv:Envelope>";

    InputStream is = new ByteArrayInputStream(soapString.getBytes());

    SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);

    MimeHeaders headers = request.getMimeHeaders();
    // If SOAP Header is compulsory
    // headers.addHeader("SOAPAction",
    // "http://www.tdcare.com/DataInterchange");
    headers.setHeader("Content-Type", "application/xml");
    request.saveChanges();

    SOAPMessage soapResponse = soapConnection.call(request, endPoint);

    System.out.println(soapResponse);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM