gpt4 book ai didi

Java 从 SOAP 服务 URL 调用获取响应

转载 作者:行者123 更新时间:2023-11-30 02:31:10 25 4
gpt4 key购买 nike

我想从 SOAP URL 的请求中获取响应。为此,我使用下面的代码

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

public class Test {
final static String UserLogin = "tuser01@xyz.com";

public static void main(String[] args) {
try {
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
String url = "http://devlocal04:8080/arsys/WSDL/public/devlocal03/DAL:OrderShim_WS";
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
printSOAPResponse(soapResponse);
soapConnection.close();
} catch (Exception e) {
System.out.println("Exception : " + e);
}
}

private static SOAPMessage createSOAPRequest() throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
String serverURI = "urn:DAL:OrderShim_WS";
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("urn", serverURI);

SOAPHeader soapHeader = envelope.getHeader();
SOAPElement soapHeaderElem = soapHeader.addChildElement("AuthenticationInfo", "urn");
SOAPElement soapHeaderElem1 = soapHeaderElem.addChildElement("userName", "urn");
soapHeaderElem1.addTextNode("Test");
SOAPElement soapHeaderElem2 = soapHeaderElem.addChildElement("password", "urn");
soapHeaderElem2.addTextNode("12345");
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("Get_Order", "urn");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("Login_Name", "urn");
soapBodyElem1.addTextNode(UserLogin);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI + "Login_Name");

soapMessage.saveChanges();
System.out.print("Request SOAP Message = ");
soapMessage.writeTo(System.out);
System.out.println();
return soapMessage;
}

private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapResponse.getSOAPPart().getContent();
System.out.print("\nResponse SOAP Message = ");
StreamResult result = new StreamResult(System.out);
transformer.transform(sourceContent, result);
}
}

我必须像下面这样请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DAL:OrderShim_WS">
<soapenv:Header>
<urn:AuthenticationInfo>
<urn:userName>Test</urn:userName>
<urn:password>12345</urn:password>
</urn:AuthenticationInfo>
</soapenv:Header>
<soapenv:Body>
<urn:Get_Order>
<urn:Login_Name>tuser01@xyz.com</urn:Login_Name>
</urn:Get_Order>
</soapenv:Body>
</soapenv:Envelope>

但是当我运行我的代码时,他们使用下面的请求调用此 SOAP

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DAL:OrderShim_WS">
<SOAP-ENV:Header>
<urn:AuthenticationInfo>
<urn:userName>Test</urn:userName>
<urn:password>12345</urn:password>
</urn:AuthenticationInfo>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<urn:Get_Order>
<urn:Login_Name>tuser01@xyz.com</urn:Login_Name>
</urn:Get_Order>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

在我的请求中,我可以在“soapenv”的 plcae 中看到“SOAP-ENV”,但我没有得到有效的响应。

我使用的是 Java 1.8。

最佳答案

我认为您收到此错误是因为 SOAP-ENV。将 SOAP-ENV 替换为soapenv 或使您的请求与所需的相同。您将从我的代码中得到一个想法

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();

String serverURI = "";

// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
soapMessage
.getSOAPPart()
.getEnvelope()
.removeAttributeNS("http://schemas.xmlsoap.org/soap/envelope/",
"SOAP-ENV");
soapMessage.getSOAPPart().getEnvelope()
.removeAttribute("xmlns:SOAP-ENV");
soapMessage.getSOAPHeader().detachNode();
soapMessage.getSOAPPart().getEnvelope().setPrefix("soap");
soapMessage.getSOAPBody().setPrefix("soap");

// envelope.addNamespaceDeclaration("ns1", serverURI);
// we need to send the soap request in the format mentioned below
/*
* xmlInput =
* "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n"
* + " <soap:Body>\r\n" +
* " <ns1:LoginProcesRequest xmlns:ns1=\"http://xmlns.oracle.com/GetSFDCDetailsProcess\">\r\n"
* + " <ns1:Login>1000</ns1:Login>\r\n" +
* " <ns1:Company>1000</ns1:Company>\r\n" +
* " </ns1:LoginProcesRequest>\r\n" + " </soap:Body>\r\n" +
* "</soap:Envelope>";
*/

// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement(
"LoginProcesRequest", "ns1", serverURI);
SOAPElement soapBodyElem1 = soapBodyElem
.addChildElement("Login", "ns1");
soapBodyElem1.addTextNode(inputlogin);
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("Company",
"ns1");
soapBodyElem2.addTextNode(inputcompany);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI + "LoginProcesRequest");
soapMessage.saveChanges();
/* Print the request message */
System.out.print("Request SOAP Message = ");
soapMessage.writeTo(System.out);
System.out.println();

您可以轻松探索这一点

关于Java 从 SOAP 服务 URL 调用获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44245315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com