首页 > 解决方案 > SOAP Web 服务 - java.lang.UnsupportedOperationException:SOAP 文档中不允许实体引用

问题描述

我看到这是一些 JDK 错误?这个破坏了我的整个代码......没有其他参考资料也没有任何提示......有人可以帮我吗?

我正在向 Web 服务端点发送消息,然后繁荣.. 代码/类是自动生成的。我正在使用 OpenJDK 1.8

从上下文获取消息时,我在 handleMessage 中获取它。

@Override
    public synchronized boolean handleMessage(SOAPMessageContext context) {
        HttpSession session = ((javax.servlet.http.HttpServletRequest) context.get(MessageContext.SERVLET_REQUEST))
                .getSession();
        boolean isREsponse = false;
        SOAPMessage soapMsg = null;
        String messageId = null;
        Node docBody = null;
        try {
            soapMsg = context.getMessage();

看起来像:

java.lang.UnsupportedOperationException: Entity References are not allowed in SOAP documents
    at com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl.createEntityReference(SOAPDocumentImpl.java:148)
    at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.createEntityReference(SOAPPartImpl.java:437)
    at com.sun.xml.ws.api.message.saaj.SaajStaxWriter.writeEntityRef(SaajStaxWriter.java:237)
    at com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput$XmlStreamOutWriterAdapter.writeEntityRef(XMLStreamWriterOutput.java:291)
    at com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput$NewLineEscapeHandler.escape(XMLStreamWriterOutput.java:255)
    at com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput.text(XMLStreamWriterOutput.java:165)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.leafElement(XMLSerializer.java:328)
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImplImpl.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:1070)
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImplImpl.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:1049)
    at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:254)
    at com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:130)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:360)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:276)
    at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:94)
    at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:111)
    at com.sun.xml.ws.db.glassfish.BridgeWrapper.marshal(BridgeWrapper.java:162)
    at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:387)
    at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:162)
    at com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:196)
    at com.sun.xml.ws.api.message.saaj.SAAJFactory.readAsSOAPMessage(SAAJFactory.java:265)
    at com.sun.xml.ws.api.message.saaj.SAAJFactory.readAsSAAJ(SAAJFactory.java:192)
    at com.sun.xml.ws.api.message.saaj.SAAJFactory.read(SAAJFactory.java:181)
    at com.sun.xml.ws.message.AbstractMessageImpl.toSAAJ(AbstractMessageImpl.java:206)
    at com.sun.xml.ws.api.message.MessageWrapper.readAsSOAPMessage(MessageWrapper.java:146)
    at com.sun.xml.ws.handler.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:55)
    at pl.sygnity.common.SisHandle.handleMessage(SisHandle.java:84)
    at pl.sygnity.common.SisHandle.handleMessage(SisHandle.java:1)
    at com.sun.xml.ws.handler.HandlerProcessor.callHandleMessageReverse(HandlerProcessor.java:311)
    at com.sun.xml.ws.handler.HandlerProcessor.callHandlersResponse(HandlerProcessor.java:182)
    at com.sun.xml.ws.handler.ServerSOAPHandlerTube.callHandlersOnResponse(ServerSOAPHandlerTube.java:136)
    at com.sun.xml.ws.handler.HandlerTube.processResponse(HandlerTube.java:144)
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1117)
    at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1020)
    at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:989)
    at com.sun.xml.ws.api.pipe.Fiber.run(Fiber.java:783)
    at com.sun.xml.ws.api.pipe.Fiber.start(Fiber.java:390)
    at com.sun.xml.ws.server.WSEndpointImpl.processAsync(WSEndpointImpl.java:338)
    at com.sun.xml.ws.server.WSEndpointImpl.process(WSEndpointImpl.java:368)
    at com.sun.xml.ws.transport.http.HttpAdapter.invokeAsync(HttpAdapter.java:704)
    at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:182)
    at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:131)
    at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:167)
    at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:51)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

我看到了其他一些帖子:最新的 Open JDK 8 JAXB 库无法解组具有包含换行符的属性的对象以及 Jira 问题https://bugs.openjdk.java.net/browse/JDK-8210144所以我已经降级了 Java版本为 jdk1.8.0_152 但仍然出现此错误..

任何人?任何事物?

标签: javaweb-servicessoapjava-8

解决方案


我正在使用 .Net 服务,它期望处理指令,例如: <?xml version="1.0" encoding="UTF-8" Standalone="yes"?> 位于 SoapBody 的中间,作为传递泛型的一种方式有效载荷由他们的 ESB 解组时。

<xmlRequest><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <PayloadXml/>
</xmlRequest>

这是非法的。我怀疑这种情况可能会发生在你的情况下。

就我而言,他们应该使用CDATA

<xmlRequest><![CDATA[
   <PayloadXml/>]]>
</xmlRequest>

推荐阅读