Error deploying SOAP web service with Maven and Apache Tomcat

Asked

Viewed 395 times

1

I built a JAX-WS application by Maven, but I’m unable to deploy it to the Tomcat application server.

They follow my artifacts:

  • pom.xml:
<project
    xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>HelloWebService</groupId>
    <artifactId>HelloWebService</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>JAX-WS webservice with maven</name>
    <url>http://maven.apache.org</url>
   <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.1.3</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>HelloService</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

The class that represents my web service:

package HelloWebService;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloWebService {

    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name="guestname") String guestname){
        if(guestname==null){
            return "Hello";
        }
        return "Hello "+ guestname;
    }

}

Directory files WEB-INF:

  • sun-jaxws.xml:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
  <endpoint name="HelloWebService" implementation="HelloWebService.HelloWebService" url-pattern="/helloWebService" ></endpoint>
  • web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" version="2.5">

  <display-name>jaxwsExample</display-name>

  <listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>helloWebService</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloWebService</servlet-name>
    <url-pattern>/helloWebService</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>120</session-timeout>
  </session-config>
</web-app>

I copied the WAR generated by Maven to TOMCAT_HOME/webapps, but when climbing the server the following log is generated:

Set 05, 2015 9:40:42 AM org.apache.catalina.core.StandardContext listenerStart
Grave: Exception sending context initialized event to listener instance of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
com.sun.xml.ws.transport.http.servlet.WSServletException: WSSERVLET11: failed to parse runtime descriptor: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[3,128]
Message: XML document structures must start and end within the same entity.
    at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: com.sun.xml.ws.streaming.XMLStreamReaderException: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[3,128]
Message: XML document structures must start and end within the same entity.
    at com.sun.xml.ws.streaming.XMLStreamReaderUtil.wrapException(XMLStreamReaderUtil.java:267)
    at com.sun.xml.ws.streaming.XMLStreamReaderUtil.next(XMLStreamReaderUtil.java:95)
    at com.sun.xml.ws.streaming.XMLStreamReaderUtil.nextContent(XMLStreamReaderUtil.java:110)
    at com.sun.xml.ws.streaming.XMLStreamReaderUtil.nextElementContent(XMLStreamReaderUtil.java:100)
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:211)
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147)
    at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:108)
    ... 13 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[3,128]
Message: XML document structures must start and end within the same entity.
    at com.sun.xml.stream.XMLReaderImpl.next(XMLReaderImpl.java:571)
    at com.sun.xml.ws.util.xml.XMLStreamReaderFilter.next(XMLStreamReaderFilter.java:92)
    at com.sun.xml.ws.streaming.XMLStreamReaderUtil.next(XMLStreamReaderUtil.java:76)
    ... 18 more

Set 05, 2015 9:40:45 AM org.apache.catalina.core.ApplicationContext log
Informações: ContextListener: contextInitialized()
Set 05, 2015 9:40:45 AM org.apache.catalina.core.ApplicationContext log
Informações: SessionListener: contextInitialized()
Set 05, 2015 9:40:45 AM org.apache.catalina.core.ApplicationContext log
Informações: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@7192a096')
  • Good morning, do not use Stacksnippet to post code, Stacksnippet are only used to play HTML, JS and CSS. Use icone { } or the shortcut Ctrl+K. Read: https://blog.stackexchange.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/

  • Thanks, I’m new user. Thanks for the tip

1 answer

1


The mistake is to parse your file sun-jaxws.xml, how this log snippet shows:

WSSERVLET11: failed to parse Runtime Descriptor: XML Reader error: javax.xml.stream.Xmlstreamexception: Parseerror at [Row,col]:[3,128]

In the message below the error suggests that the elements the document structure should start and end with the same element type:

Message: XML Document Structures must start and end Within the same Entity.

If you look at your file, you will see that you are missing close the element endpoints. So consider using this content in your sun-jaxws.xml:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
    <endpoint name="HelloWebService" implementation="HelloWebService.HelloWebService" url-pattern="/helloWebService"></endpoint>
</endpoints>
  • Bruno, thank you very much. By tidying up the xml structure it worked perfectly.

  • @Filipecanatto OK, if it has been helpful, consider accepting the answer.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.