【问题标题】:How to fix "Trying to write END_DOCUMENT when document has no root" error?如何修复“当文档没有根时尝试写入 END_DOCUMENT”错误?
【发布时间】:2023-03-11 07:46:01
【问题描述】:

我继续 =)) 使用 Eclipse 在 Tomcat 7 上创建 jax-ws soap Web 服务(取得了不同程度的成功)。

我的 Eclipse“mavened”webapp 项目中有接口:

@WebService(targetNamespace = "http://new.webservice.namespace", name = "MayaServiceInterface")
@XmlSeeAlso({ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface MayaServiceInterface {


    @WebResult(name = "getPersonResponse", targetNamespace = "http://new.webservice.namespace", partName = "parameter")
    public getPersonResponse getCustomer(
        @WebParam(partName = "parameter", name = "getPersonRequest", targetNamespace = "http://new.webservice.namespace")
        getPersonRequest parameter

    );

}

以及实现接口的类:

@javax.jws.WebService
     (
                      serviceName = "ABCWsService",
                      portName = "ABCWsPort",
                      targetNamespace = "http://new.webservice.namespace",
                      endpointInterface = "com.mayacomp.ws.MayaServiceInterface")


public class MayaServiceEndPoindImpl implements MayaServiceInterface {

    @Override
    public getPersonResponse getCustomer(getPersonRequest parameter) {
        // TODO Auto-generated method stub
        return null;
    }


} // end of class

当我尝试“在服务器上运行”网络服务时,我会收到一个包含下一个信息的页面:

Web 服务端点信息服务名称: {http://new.webservice.namespace}ABCWsService 端口名称: {http://new.webservice.namespace}ABCWsPort 地址: http://localhost:8080/maya-web-service/ABCWsWSDL: http://localhost:8080/maya-web-service/ABCWs?wsdl 实施 类:com.mayacomp.ws.MayaServiceEndPoindImpl

当我点击 http://localhost:8080/maya-web-service/ABCWs?wsdl 时,我在 Eclipse 控制台中收到 HTTP 500 错误和下一个信息:

2015 年 5 月 5 日晚上 7:08:16 com.sun.xml.ws.transport.http.servlet.WSServletDelegate doGet 严重: 捕获 throwable java.io.IOException: 尝试写入 END_DOCUMENT 当文档没有根时(即尝试输出空文档)。在 com.sun.xml.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:299) 在 com.sun.xml.ws.transport.http.HttpAdapter.publishWSDL(HttpAdapter.java:931) 在 com.sun.xml.ws.transport.http.HttpAdapter.handleGet(HttpAdapter.java:440) 在 com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:193) 在 com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:161) 在 com.sun.xml.ws.transport.http.servlet.WSServlet.doGet(WSServlet.java:89) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 引起: javax.xml.stream.XMLStreamException:尝试写入 END_DOCUMENT 时 文档没有根(即尝试输出空文档)。在 com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1518) 在 com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1547) 在 com.ctc.wstx.sw.BaseStreamWriter._finishDocument(BaseStreamWriter.java:1373) 在 com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:243) 在 com.sun.xml.ws.util.xml.XMLStreamWriterFilter.close(XMLStreamWriterFilter.java:67) 在 com.sun.xml.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:297) ... 27 更多

但我正在等待接收 wsdl(如果这听起来不奇怪)。请帮助我修复此错误并查看我的 wsdl。

【问题讨论】:

  • 我添加了对象而不是返回 null,但这并没有解决问题。 =(( 我还将 wsdl (wsdlLocation) 的路径添加到 @javax.jws.WebService 注释中。
  • 问题出在 Eclipse 中的 Tomcat 首选项中。我将战争直接部署到 Tomcat 并且工作正常。

标签: eclipse web-services tomcat wsdl jax-ws


【解决方案1】:

问题在于 stax-ex jar。

  • 您可以将 stax-ex-1.7.7.jar 放到您的库位置
  • 您可以添加 org.jvnet.staxex 税前 1.7.7

到你的 pom.xml

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2020-09-06
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多