Эта проблема беспокоила меня уже несколько дней. Надеюсь, кто-то сталкивался с этим раньше и разработал обходной путь.
Итак, я разработал промежуточное Java-приложение, которое во время его выполнения вызывает действие SOAP. Теперь поведение этого кода в JDK 1.6 работает хорошо:
// 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);
Однако, когда я использую этот же код в JDK 1.3 или 1.4 с подключенными библиотеками SOAP, все выше работает / компилируется / выполняется, за исключением того факта, что поле SOAPAction заголовка пусто, Как ни странно, когда я проверяю, какое значение у этого заголовка (строки, следующие сразу за настройкой заголовка), отображается соответствующее значение. Однако, когда это идет по проводу, поле пусто. Так как это поле указывает на ресурс, который я хочу обработчику, мои сообщения возвращаются обратно к двери.
Кто-нибудь сталкивался с этой проблемой раньше? Если так, есть ли возможные обходные пути? (Я, конечно, готов использовать другую библиотеку, если потребуется.)
UPDATE:
Библиотеки на моем пути к классам:
- Xerces (resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar)
- Саадж (saaj.jar)
- Ось (axis.jar
- JAX-RPC (jaxrpc.jar)
- Стандартный SOAP (активация.jar, mail.jar, soap.jar, xerces.jar)
- Регистрация и обнаружение общин
Заранее спасибо!