使用附件调用Web服务

时间:2010-06-25 00:06:32

标签: java jaxb jax-ws

我在尝试调用需要附件的网络服务时遇到了一个相当令人沮丧的问题。

这是错误:

  

Unexpected Attachment type = class   java.lang.Object中

从这里开始:

  

类= “com.sun.xml.ws.client.sei.ResponseBuilder $ AttachmentBuilder”   file =“ResponseBuilder.java”line =“250”   方法= “createAttachmentBuilder”

Web代理给我的方法是:

  public Reply putDocument(
    @WebParam(targetNamespace="uri:put.document", partName="request", name="request")
      StoreType request,
    @WebParam(targetNamespace="", partName="put", name="put")
      Object put);

我无法弄清楚是什么传递给“put”,它只被定义为一个Object。

我试过了:

byte[]
String
DataHandler(ByteArrayDataSource)
uri.put_document.ObjectFactory.createPut(byte[])
AttachmentPart

我也试过寻找代码,但到目前为止还没有运气。

编辑:WSDL如下。

<?xml version="1.0" encoding="UTF-8" ?>
<definitions targetNamespace="urn:fer"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:tns="urn:fer"
             xmlns:get="uri:get.document"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
             xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
  <types>
      <xsd:schema>
        <xsd:import namespace="uri:get.document"
                    schemaLocation="../xsd/getDocument.xsd"/>
      </xsd:schema>
  </types>
  <message name="putDocument">
    <part name="request" element="put:request"/>    
    <part name="put" element="put:put"/>
  </message>
  <message name="putDocumentReply">
    <part name="reply" element="put:reply"/>    
  </message>
  <portType name="FrontEndRepository">
    <operation name="putDocument">
      <input message="tns:putDocument"/>
      <output message="tns:putDocumentReply"/>
    </operation>
  </portType>
  <binding name="frontEndRepositoryPortSOAP11Binding"
           type="tns:FrontEndRepository">
    <soap:binding style="document"
                  transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="putDocument">
      <soap:operation style="document"
                      soapAction="putDocument"/>
      <input>
        <mime:multipartRelated>
          <mime:part>
            <soap:body use="literal" parts="request"/>
          </mime:part>
          <mime:part>
            <mime:content part="put" type="binary"/>
          </mime:part>
        </mime:multipartRelated>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="FrontEndRepository">
    <port name="FrontEndRepository"
          binding="tns:frontEndRepositoryPortSOAP11Binding">
      <soap:address location="http://localhost:7101/FER-FrontEndrepository-context-root/frontEndRepositoryPort"/>
    </port>
  </service>
</definitions>

1 个答案:

答案 0 :(得分:2)

我希望mime:content元素中的type属性包含MIME类型,例如。 “application / octet-stream”,“application / pdf”或“text / plain”而不是“binary”。

使用javax.activation.DataHandler应该可行,我认为您应该能够修复附件的MIME类型,然后使用DataHandler实例或适合MIME类型的类型(例如java.awt.Image)为“image / jpeg”)。

您说您已尝试过DataHandler,但您没有为该案例提供例外。如果仍然失败,那么当你尝试时会发生什么?