J'essaie d'envoyer une pièce jointe au client à partir du service Web Axis2. Le problème est que le contexte de message, que le client reçoit du service, ne contient aucune pièce jointe, bien que le dernier semble l'ajouter. Voici le bref code des deux côtés. Service:Perdre des pièces jointes dans la réponse Axis2
MessageContext inMC = MessageContext.getCurrentMessageContext();
OperationContext operationContext = inMC.getOperationContext();
MessageContext outMC = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
DataHandler handler = new DataHandler (new FileDataSource("C://goods.xml"));
String attachID = outMC.addAttachment(handler);
OMElement idElem = factory.createOMElement("doc", ns);
idElem.addAttribute("href", "cid:" + attachID, ns);
client (en essayant de recevoir la pièce jointe):
MessageContext mcResponse = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
SOAPBody body = mcResponse.getEnvelope().getBody();
OMElement attachElem = body.getFirstChildWithName (new QName("doc"));
String attachID = attachElem.getAttributeValue (new QName("href"));
attachID = attachID.replaceFirst("cid:", "");
DataHandler dataHandler = mcResponse.getAttachment(attachID);
méthode Getattachment() retourne null. En cas de débogage de l'application cliente, IDE montre que cette carte de pièce jointe dans le contexte de message d'entrée ne contient aucun élément (taille = 0). L'objet OMElement (idElem), qui contient l'ID de pièce jointe, est reçu et lu par le client normalement (le débogage a montré cid). Les paramètres enableSwA, cacheAttachments, attachmentDIR, sizeThreshold sont définis à la fois dans services.xml et dans la partie programmation du client. Quel est le problème avec le contexte du message? Merci beaucoup pour vos suggestions.
Mise à jour: TCPmon a montré le contenu suivant. Demande au service:
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><getXMLFile xmlns="http://axis2.apache.org"><filename>goods.xml</filename></getXMLFile></soapenv:Body></soapenv:Envelope>
Je pense qu'il est ok :)
Réponse du service:
109
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><doc href="cid:[email protected]"></doc></soapenv:Body></soapenv:Envelope>
0
Je présente mes excuses pour un peu des questions simples, mais où devrait se refléter l'attachement? Je suppose que si le service envoie une pièce jointe, le message SOAP contient des données binaires, n'est-ce pas? J'ai aussi vérifié que la pièce jointe était dans un contexte de message côté service - c'est OK, je peux l'obtenir du contexte après l'ajout.
Avez-vous trace le trafic HTTP? – home
Non, je ne l'ai pas fait.La supposition de l'ajout réussi de la pièce jointe sur la pièce de service est basée sur l'exécution normale de cette partie et la transmission de OMElement avec l'ID de pièce jointe au client. Si vous expliquez, comment tracer le trafic HTTP et ce que les résultats du traçage signifieront, je serai heureux de le faire :) – Eadel
Vous pourriez par exemple. utilisez Wirkshark ou un simple proxy TCP pour voir si la pièce jointe a été soumise. Vous seriez en mesure d'isoler le problème au client ou au serveur. – home