从weblogic 11g升级到12c后,MTOM无法正常工作

时间:2015-03-23 11:06:01

标签: java web-services weblogic12c mtom

我有一个Web服务,用户可以使用文档ID作为输入来请求文档。它是以这种方式实现的,除了示例是用于上传: http://docs.oracle.com/cd/E15523_01/web.1111/e13734/mtom.htm#WSADV143

我的WebService实现类:

@HandlerChain(file = "handlers.xml")
@BindingType("http://schemas.xmlsoap.org/wsdl/soap/http")
@StreamingAttachment(parseEagerly=false, memoryThreshold=4000000L)
@MTOM(threshold=3072)
@WebService(name="MyServicePortType",
    serviceName="MyService",
    targetNamespace="http://my.services.example.com")
public class MyServiceImpl implements MyService, Serializable {

/**
 *
 */
private static final long serialVersionUID = 1L;

@Resource
private WebServiceContext wsctx;

private MyRemote ejbRemote;
private EJBClientHelper ejbClientHelper;

public ElkomImpl() {
    ejbClientHelper = new EJBClientHelper();
}

@WebMethod
public @XmlMimeType("application/octet-stream") DataHandler fetchDocument( @WebParam(name = "reference")String reference) {
    SOAPFault soapFault = null;
    Logger log = ApplicationLogFactory.getLogger(this.getClass());
    try {
        log.debug("Should fetch document with reference " + reference);

        elkomRemote = ejbClientHelper.getElkomRemote();
        DataHandler dh = ejbRemote.fetchDocument(reference);
        if(dh == null) {
            throw new SOAPException();
        }
        return dh;
    } catch (NamingException e) {
        log.fatal(Consts.NAMING_EXCEPTION, e);
        throw new SOAPFaultException();
    } catch (PropsFileException e) {
        log.fatal(Consts.PROPS_FILE_EXCEPTION, e);
        throw new SOAPFaultException();
    } catch (SOAPException e) {
        log.error("SOAPException", e);
        throw new SOAPFaultException();
    } 
}
}

这是一个maven项目,在更新之前我使用weblogic库来处理ejb + JAX-WS RI 2.2.5。现在更新后,weblogic强制使用JAX-WS RI 2.2.10-b140319.1121。这个版本坏了吗?

运行WebLogic 11g的webservice的响应:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
  <ns2:fetchDocumentResponse xmlns:ns2="http://my.services.example.com">
     <return>
        <xop:Include href="cid:58eaad0c-4723-44c0-bada-4d9bd237b935@example.jaxws.sun.com" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
     </return>
  </ns2:fetchDocumentResponse >

文件在附件中。

运行WebLogic 12c的响应

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
  <ns0:hentDokumentResponse xmlns:ns0="http://my.services.example.com">
     <return>SUkqADRTAAAAgLJIAICgAgLJIAICySAC ...</return>
  </ns0:hentDokumentResponse>
</S:Body>
</S:Envelope>

编辑: Weblogic 11g使用Java EE 6,而12c使用Java EE 7. Java版本:

java版本&#34; 1.7.0_67&#34; Java(TM)SE运行时环境(版本1.7.0_67-b01) Java HotSpot(TM)64位服务器VM(内置24.65-b04,混合模式)

Document只是一个base64encoded String。我们需要它像以前一样......其他人有这个问题吗?并找到了解决方案?

1 个答案:

答案 0 :(得分:0)

不知道他们在WLS12c中改变了什么,但我们遇到了同样的问题。我们的解决方案是在客户端上使用Accept标头:

mimeHeaders.setHeader("Accept", "application/xop+xml;");

跟踪:

  • @Mtom&#34; threshold&#34;在服务器上没有做出任何改变
  • 用axis2替换消息工厂并强制&#34; setProcessMTOM(true)&#34;没有做出任何改变
  • 普通SOAP客户端(MessageFactory / SoapMessage)与Accept标头一起正常工作 - &gt;通过xop回复:包括
  • jaxws客户端无需任何更改

任何链接到@ baron5

提到的勾选