2010-10-06 29 views
1

我正在爲需要附件的SOAP服務創建Java客戶端。我使用的是之前使用的java.xml.soap類,但不使用附件。服務器聲稱我的附件不包括在內。Content-Type Missing「start =」Java SOAP客戶端中的標記,服務器找不到附件

我使用SoapUI,它工作,wireshark將我的SOAP消息與工作的SOAP消息進行比較。一個很大的區別是我的頭文件不包含「start =」。

工作的Content-Type看起來是這樣的:

內容類型:多部分/相關;類型= 「文本/ xml」 的;開始= 「」;邊界=「---- = _ Part_23_6341950.1286312374228」

內容類型,我從我的Java代碼得到的是這樣的:

內容類型:多部分/相關;類型= 「文本/ xml」 的; border =「---- = _ Part_23_6341950.1286312374228」

沒有開始=即使在根元素上設置了內容ID。正在運行和發生故障的SOAP消息幾乎完全相同。如何獲得生成的開始標記,或者服務器可能看不到附件的其他原因?

感謝

 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); 

回答

0

這個工作對我來說:

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