我将继续 =)) 使用 Eclipse 在 Tomcat 7 上创建 jax-ws soap Web 服务(取得了不同程度的成功)。
我的 Eclipse“mavened”webapp 项目中有接口(interface):
@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
);
}
和实现接口(interface)的类:
@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 Services Endpoint Information Service Name: {http://new.webservice.namespace}ABCWsService Port Name: {http://new.webservice.namespace}ABCWsPort Address: http://localhost:8080/maya-web-service/ABCWs WSDL: http://localhost:8080/maya-web-service/ABCWs?wsdl Implementation class: com.mayacomp.ws.MayaServiceEndPoindImpl
当我点击 http://localhost:8080/maya-web-service/ABCWs?wsdl 时我在 Eclipse 控制台中收到 HTTP 500 错误和下一个信息:
may 05, 2015 7:08:16 PM com.sun.xml.ws.transport.http.servlet.WSServletDelegate doGet SEVERE: caught throwable java.io.IOException: Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document). at com.sun.xml.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:299) at com.sun.xml.ws.transport.http.HttpAdapter.publishWSDL(HttpAdapter.java:931) at com.sun.xml.ws.transport.http.HttpAdapter.handleGet(HttpAdapter.java:440) at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:193) at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:161) at com.sun.xml.ws.transport.http.servlet.WSServlet.doGet(WSServlet.java:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: javax.xml.stream.XMLStreamException: Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document). at com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1518) at com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1547) at com.ctc.wstx.sw.BaseStreamWriter._finishDocument(BaseStreamWriter.java:1373) at com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:243) at com.sun.xml.ws.util.xml.XMLStreamWriterFilter.close(XMLStreamWriterFilter.java:67) at com.sun.xml.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:297) ... 27 more
但我正在等待接收 wsdl(如果这听起来不奇怪的话)。请帮助我修复此错误并查看我的 wsdl。
最佳答案
问题是关于 stax-ex jar。
- 您可以将 stax-ex-1.7.7.jar 放到您的库位置
- 你可以添加 org.jvnet.staxex 网站 斯塔克斯 1.7.7
到你的 pom.xml
关于eclipse - 如何修复 "Trying to write END_DOCUMENT when document has no root"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058588/