SOAP を使用して Web サービスを呼び出す必要があります。次の SOAPMessage を生成するクライアントを Java で作成しました。
<?xml version="1.0" encoding="utf-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:abc="http://company.com/SAMPLE/ABC">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<abc:genXX>
<ServiceRequestID>111</ServiceRequestID>
<Code>328630962</Code>
</abc:genXX>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
アプリケーション内で呼び出すと、SOAP の解析中にその呼び出しでエラーが発生します。
<SOAP:Header>
</SOAP:Header>
<SOAP:Body>
<SOAP:Fault xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>SOAP:Client</faultcode>
<faultstring>Error during parsing of SOAP header</faultstring>
<faultactor>http://sap.com/xi/XI/Message/30</faultactor>
<detail>
<SAP:Error SOAP:mustUnderstand="1"
xmlns:SAP="http://sap.com/xi/XI/Message/30">
<SAP:Category>XIProtocol</SAP:Category>
<SAP:Code area="PARSER" />
<SAP:P1 />
<SAP:P2 />
<SAP:P3 />
<SAP:P4 />
<SAP:AdditionalText />
<SAP:Stack>System error in parser
</SAP:Stack>
</SAP:Error>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
しかし、SOAP UI を使用して同じコンピューターで呼び出すと、Web サービスは適切に応答します。私のアプリケーションのクライアントは次のように作成されます。
public void callWebservice(String serviceRequestID, String code) {
try {
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
URLEndpoint url = new URLEndpoint ("http://company.com:50000/");
SOAPMessage soapResponse = soapConnection.call(
createSOAPRequest(serviceRequestID, code), url);
{...}
soapConnection.close();
} catch (Exception e) {
//
}
private SOAPMessage createSOAPRequest(String serviceRequestID,
String code) throws SOAPException{
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
String serverURI = "http://company.com/SAMPLE/ABC";
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("abc", serverURI);
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("genXXX", "abc");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("ServiceRequestID");
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("Code");
soapBodyElem1.addTextNode(serviceRequestID);
soapBodyElem2.addTextNode(code);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI );
String loginPassword = "USER:PASSWORD";
headers.addHeader("Authorization", "Basic " + new
String(Base64.encodeBase64(loginPassword.getBytes())));
soapMessage.saveChanges();
return soapMessage;
}
}
ヘッダーと認証を確認しましたが、正しいです。ユーザーまたはパスワードを変更すると、Web サービスは 401 Unauthorized で応答するため、ヘッダーは期待どおりに送信されると思います。
アプリケーション内のエラーの原因について何か手がかりはありますか?