使用Java中的SAAJ API无效的内容类型错误

时间:2017-02-14 21:48:03

标签: java soap content-type soap-client saaj

我正在尝试使用SAAJ访问SAOP API。 我已经遵循了创建SOAP请求主体和其他答案中存在的相同代码 调用SOAP API。 此特定服务不需要任何身份验证(如API文档中所述),也不需要任何输入参数。

From WSDL: (copied only relevant content)

<xs:complexType name="getCustomerNames">
<xs:sequence/>
</xs:complexType> 
...
<wsdl:operation name="getCustomerNames">
<wsdl:input message="tns:getCustomerNames" name="getCustomerNames"/>
<wsdl:output message="tns:getCustomerNamesResponse" name="getCustomerNamesResponse"/>
<wsdl:fault message="tns:SOAPException" name="SOAPException"/>
</wsdl:operation>

以下是创建soap主体并调用API的Java代码

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection connection = scf.createConnection();
SOAPFactory sf = SOAPFactory.newInstance();
String serverURI = "com.webservices.services.authentication";
MessageFactory mf =  MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); // I tried without parameters as well
SOAPMessage message = mf.createMessage();
message.getSOAPHeader().detachNode();           
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("auth", serverURI);
Name bodyName = sf.createName("getCustomerNames", "auth", serverURI);
SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
URL endpoint = new URL(urlendpoint); // urlendpoint is the one that I took from WSDL file service endpoint.
SOAPMessage response = connection.call(message, endpoint);
connection.close();

每当我执行此操作时,都会收到以下错误消息。我无法理解为什么..同样的网址正在返回 当我从Unix执行curl命令并发布由上面的java代码创建的相同请求xml时的正确响应。

Feb 14, 2017 3:21:54 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType
SEVERE: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?

1 个答案:

答案 0 :(得分:0)

该错误意味着服务器使用HTML页面而不是SOAP响应进行响应。要调试它,您需要拦截响应并查看HTML页面的内容;它可能包含有关该问题的更多信息。