这个问题困扰了我好几天。希望有人以前遇到过这种情况并开发了一种解决方法。
所以我开发了一个中间件 Java 应用程序,它在执行过程中会调用一个 SOAP 操作。现在,这段代码在 1.6 JDK 下的行为运行良好:
// inside a try-catch block
SOAPConnectionFactory soapConnectionFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnectionFactory.createConnection();
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMsg = messageFactory.createMessage();
String soapAction = getHeaderUrl() + "/" + method + "\r\n";
MimeHeaders headers = soapMsg.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
// review the SOAPAction header
int header_count =
soapMsg.getMimeHeaders().getHeader("SOAPAction").length;
out("SOAPActions (from Soap header): ");
if (header_count == 0) out ("No SOAPActions defined.");
for (int i=0; i<header_count; i++)
out("SOAPAction["+i+"] = \"" +
soapMsg.getMimeHeaders().getHeader("SOAPAction")[i]
+ "\"");
SOAPPart soapPart = soapMsg.getSOAPPart();
StreamSource s = new StreamSource(new StringReader(msg));
soapPart.setContent(s);
soapMsg.saveChanges();
ByteArrayOutputStream req_bytes = new ByteArrayOutputStream();
soapMsg.writeTo(req_bytes);
String req = new String(req_bytes.toByteArray());
SOAPMessage reply = connection.call(soapMsg, Url);
但是,当我在 1.3 或 1.4 JDK 下使用此完全相同的代码并链接了 SOAP 库时,上面的所有内容都可以工作/编译/执行,除了标头的 SOAPAction 字段是空白的事实。奇怪的是,当我检查该标题的值是什么(设置标题之后的行)时,会显示适当的值。但是,当它通过电线时,该字段是空的。由于这是向处理器指示我想要的资源的字段,因此我的消息在门口被退回。
有没有人遇到过这个问题?如果是这样,是否有可能的解决方法?(当然,如果需要,我愿意使用另一个库。)
更新:
我的类路径上的库如下:
- Xerces(resolver.jar、serializer.jar、xercesImpl.jar、xml-apis.jar)
- 萨伊 (saaj.jar)
- 轴(axis.jar
- JAX-RPC (jaxrpc.jar)
- 标准 SOAP(activation.jar、mail.jar、soap.jar、xerces.jar)
- 公共记录和发现
提前致谢!