[英]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.