我有一个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。我们需要它像以前一样......其他人有这个问题吗?并找到了解决方案?
答案 0 :(得分:0)
不知道他们在WLS12c中改变了什么,但我们遇到了同样的问题。我们的解决方案是在客户端上使用Accept标头:
mimeHeaders.setHeader("Accept", "application/xop+xml;");
跟踪:
任何链接到@ baron5
提到的勾选