Ce problème m'a dérangé pendant des jours. Espérons que quelqu'un a déjà rencontré cela et a développé une solution de contournement. J'ai donc développé une application Java middleware qui, lors de son exécution, appelle une action SOAP. Maintenant, le comportement de ce morceau de code sous le JDK 1.6 fonctionne bien:SoapAction Problème sous Java 1.3
// 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);
Cependant, lorsque j'utilise ce même code sous 1.3 ou 1.4 JDK avec les bibliothèques SOAP liées, tout au-dessus des œuvres/compile/exécute, sauf le fait que le champ SOAPAction de l'en-tête est vide. Assez bizarrement, quand je vérifie quelle est la valeur de cet en-tête (les lignes immédiatement après la mise en place de l'en-tête) la valeur appropriée est affichée. Cependant, quand il passe sur le fil, le champ est vide. Comme c'est le champ qui indique la ressource que je veux au processeur, mes messages sont retournés à la porte.
Quelqu'un at-il déjà rencontré ce problème? Si oui, y a-t-il des solutions possibles? (Je suis, bien sûr, prêt à utiliser une autre bibliothèque si nécessaire.)
MISE À JOUR:
Les bibliothèques sur mon chemin de classe sont les suivantes:
- Xerces (resolver.jar, sérialiseur jar, xercesImpl.jar, xml-apis.jar)
- Saaj (saaj.jar)
- axe (axis.jar
- JAX-RPC (jaxrpc.jar)
- SOAP standard (activation.jar, mail.jar, soap.jar, xerces.jar)
- Commons Logging et découverte
Merci à l'avance!
Merci. Va essayer JAX-WS-RI. Également ajouté les bibliothèques à la publication initiale. –