用于调用SOAP Web服务的Java / Groovy方法(版本1.2)

时间:2015-12-30 17:32:49

标签: java web-services soap groovy

我正在尝试使用Java / Groovy代码调用Web Service(版本1.2并且没有此服务的1.1版)。我试过以下选项

使用SAAJ

String endpointURL = <<endpoint>>
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
def Request = <<Request XML>>
InputStream is = new ByteArrayInputStream(Request.getBytes());
SOAPMessage soapMessage = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(null, is);      
SOAPMessage soapResponse = soapConnection.call(soapMessage, endpointURL)

使用Groovy WsLite

 def client = new SOAPClient(<<endpoint>>)
 def response = client.send(SOAPVersion.V1_2, <<RequestXML>>)

在这两种情况下,我都接受服务的接收和错误,表明版本不匹配。底层架构是Oracle Service Bus。

我能够使用相同的代码调用版本1.1和1.2都可用的Web服务。我怀疑在这种情况下,我们只能调用属于1.1版的服务

有人可以帮助我理解我在这里缺少的是什么吗?

2 个答案:

答案 0 :(得分:2)

在SOAP 1.2版的情况下,通过添加SOAPAction作为mimeheader解决了该问题。我能够通过传递SOAPAction和SOAPVersion

来解决这个问题

如果SAAJ通过

MimeHeaders mimeh = message.getMimeHeaders();
mimeh.addHeader("SOAPAction",<<soapaction>>);

对于Groovy wslite

def response = client.send(SOAPVersion.V1_2, SOAPAction: <<soapaction>>,<<RequestXML>>)

答案 1 :(得分:0)

您的底层oracle服务总线可能配置为仅支持SOAP 1.1版本。您是否更改了代码以使用SOAPConstants.SOAP_1_1_PROTOCOL并尝试相同的操作。

如果这样可行,则必须启用OSB以支持1.1和1.2 soap版本。

谢谢