2010-10-06 10 views
1

Je crée un client Java pour un service SOAP qui prend une pièce jointe. J'utilise des classes java.xml.soap, que j'utilise auparavant, mais pas avec des pièces jointes. Le serveur prétend que ma pièce jointe n'est pas incluse. J'ai utilisé SoapUI, qui fonctionne, et wireshark pour comparer mon message SOAP à un message SOAP fonctionnel. Une grande différence est que mon entête n'inclut pas "start =".Type manquant "start =" Balise dans le client Java SOAP, pièce jointe non trouvée par le serveur

Le Content-Type de travail ressemble à ceci:

Content-Type: multipart/related; type = "text/xml"; start = ""; boundary = "---- = _ Part_23_6341950.1286312374228"

Le Content-Type que je reçois de mon code Java est comme ceci:

Content-Type: multipart/related; type = "text/xml"; boundary = "---- = _ Part_23_6341950.1286312374228"

Aucun début = même lorsque l'ID de contenu est défini sur l'élément racine. Les messages SOAP fonctionnels et défaillants sont sinon presque identiques. Comment puis-je obtenir la balise de démarrage générée, ou quelles sont les autres raisons pour lesquelles le serveur ne voit pas la pièce jointe?

Merci

 SOAPMessage soapMessage = 
         MessageFactory.newInstance().createMessage();    
     SOAPPart soapPart = soapMessage.getSOAPPart(); 
     SOAPEnvelope soapEnvelope = soapPart.getEnvelope();   
     SOAPBody body = soapEnvelope.getBody(); 
     SOAPHeader header = soapMessage.getSOAPHeader(); 

     soapPart.setContentId("<[email protected]>"); 

     MimeHeaders mimeHeaders = soapMessage.getMimeHeaders(); 
     mimeHeaders.addHeader("SOAPAction", "addDocument"); 
     mimeHeaders.addHeader("Accept-Encoding", "gzip,deflate"); 

     Name bodyName = soapEnvelope.createName("Document", "doc", 
      "http://ns/Document"); 
     SOAPBodyElement document = body.addBodyElement(bodyName); 

     Name filenameName = soapEnvelope.createName("Filename", "doc", 
      "http://ns/Document"); 

     SOAPElement filename = document.addChildElement(filenameName); 
     filename.setValue("filename.txt"); 

     AttachmentPart attachment = soapMessage.createAttachmentPart(); 
     attachment.setContent("Some text", "application/octet-stream"); 
     attachment.setMimeHeader("Content-Transfer-Encoding", "binary"); 

     soapMessage.addAttachmentPart(attachment); 

     SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); 
     SOAPConnection soapConnection = scf.createConnection(); 
     URL url = new URL("http://host/Service"); 

     SOAPMessage reply = soapConnection.call(soapMessage, url); 

Répondre

0

Cela fonctionne pour moi:

soapMessage.getMimeHeaders().setHeader("Content-Type", 
    soapMessage.getMimeHeaders().getHeader("Content-Type")[0]+ 
    "; start=\"<[email protected]>\"");