java - 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 但仍然出现此错误..
任何人?任何事物?
解决方案
我正在使用 .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>
推荐阅读
- dojo - 使用 dojo 列中的标题
- angular - 量角器 waitForAngularEnabled
- c# - App.config 格式和访问 .NET 中的数据
- ios - 如何在 Xcode 中隐藏代码文档/注释?
- java - 检查 smoothScrollToPosition 何时完成
- google-sheets - Google Sheets API:调用者没有权限
- python - Python 没有看到它在它的路径中肯定有的模块
- css - 使用 CSS 更改 Shiny titlePanel 的颜色
- php - 来自路由器的 Laravel 5 替代调用控制器
- neo4j - 当关系已经存在时如何记录?