Dieses Problem stört mich seit Tagen. Hoffentlich ist jemand schon einmal darauf gestoßen und hat einen Workaround entwickelt.SoapAction Problem unter Java 1.3
Also habe ich eine Middleware-Java-App entwickelt, die während ihrer Ausführung eine SOAP-Aktion aufruft. Nun wird das Verhalten dieses Stückes Code unter dem JDK 1.6 gut arbeiten:
// 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);
Allerdings, wenn ich genau diesen gleichen Code unter 1.3 oder 1.4 JDK verwenden, um mit den SOAP-Bibliotheken verknüpft, alles über Werken/kompiliert/Führt aus, außer dass das Feld SOAPAction des Headers leer ist. Seltsamerweise, wenn ich überprüfe, was der Wert dieses Headers ist (die Zeilen unmittelbar nach dem Einrichten der Kopfzeile), wird der entsprechende Wert angezeigt. Wenn es jedoch über die Leitung geht, ist das Feld leer. Da dies das Feld ist, das die Ressource anzeigt, die ich an den Prozessor senden möchte, werden meine Nachrichten an der Tür zurückgegeben.
Hat jemand dieses Problem schon einmal erlebt? Wenn ja, gibt es mögliche Problemumgehungen? (Ich bin, natürlich bereit, eine andere Bibliothek zu verwenden, wenn erforderlich.)
UPDATE:
Die Bibliotheken auf meinem Classpath sind wie folgt:
- Xerces (resolver.jar, Serializer .jar-, xercesImpl.jar, xml-apis.jar)
- Saaj (saaj.jar)
- Achse (axis.jar
- JAX-RPC (jaxrpc.jar)
- Standard-SOAP (activation.jar, mail.jar, soap.jar, xerces.jar)
- Commons und Entdeckung
Vielen Dank im Voraus anmelden!
Danke. Werde JAX-WS-RI versuchen. Auch die Bibliotheken zum ursprünglichen Post hinzugefügt. –