2016-10-10 5 views
0

Ich versuche, einen einfachen Webservice auf Tomcat, mit Eclipse und Maven laufen.WebService - Tomat/Eclipse/Maven - Die angeforderte Ressource ist nicht verfügbar

Ich bekomme immer noch diese Nachricht: 404 Die angeforderte Ressource ist nicht verfügbar.

Der Server läuft gut, keine Fehlermeldungen. Im Host-Manager wird die Website als ausgeführt angezeigt. Ein Klick darauf gibt ... ein 404.

Der Controller ist:

package nl.deholtmans.webservice; 
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; 
    } 
} 

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="nl.deholtmans.webservice.HelloWebService" url-pattern="/helloWebService" ></endpoint> 
</endpoints> 

WEB-INF/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> 

Die pom.xml ist:

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.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> 
<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> 

In Eclipse mache ich normalerweise (z. B. für Spring MVC):

[1] Projekt> Sauber [2] Run as> Maven sauber [3] Ausführen als> Maven installieren [4] Ausführen als> laufen auf dem Server

ich testen sollte es mit der folgenden URL: http://localhost:8080/HelloWebService/helloWebService

Es gibt keinen Fehler. kein Stacktrack. Nur ein 404, keine Ressource verfügbar. Über den Tomcat-Manager sehe ich, dass der Dienst läuft.

+1

Können Sie die Stack-Trace und die Verzeichnisstruktur Ihres Codes b bereitstellen Ase? –

+0

Es gibt keine Stacktraces.Alles wird erfolgreich eingesetzt. Außerdem zeigt localhost: 8080 die Hauptseite an. Die "Website" HelloWebService hat eine laufende Anzeige. – tjm1706

Antwort

0

Über eine andere Website sah ich die richtige Umsetzung. @ RITZ XAVI - Danke, dass Sie mich auf die Ordnerstruktur hingewiesen haben. Ich habe die web.xml unter WebContents (und nicht webapp) platziert.

Die endgültige Lösung, die richtige ist, ist:

[1] Webservice-Schnittstelle:

@WebService 
@SOAPBinding(style = Style.RPC) 
public interface HelloWorld{ 
    @WebMethod String getHelloWorldAsString(); 
} 

[2] Webservice Umsetzung:

@WebService(endpointInterface = "nl.deholtmans.webservice.HelloWorld") 
public class HelloWorldImpl implements HelloWorld{ 
    @Override 
    public String getHelloWorldAsString() { 
     return "Hello World JAX-WS"; 
    } 
} 

[3] sun-jaxws.xml (unter webcontent/WEB-INF):

<?xml version="1.0" encoding="UTF-8"?> 
<endpoints 
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" 
    version="2.0"> 
<endpoint 
    name="HelloWorld" 
    implementation="nl.deholtmans.webservice.HelloWorldImpl" 
    url-pattern="/hello"/> 
</endpoints> 

[4] web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, 
    Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> 
<web-app> 
<listener> 
    <listener-class> 
     com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
    </listener-class> 
</listener> 
<servlet> 
    <servlet-name>hello</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>hello</servlet-name> 
    <url-pattern>/hello</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout>120</session-timeout> 
</session-config> 
</web-app> 

[5] pom.xml (Maven) ... nur ändern:

<build> 
    <finalName>HelloService</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.2</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <webXml>WebContent\WEB-INF\web.xml</webXml> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <warName>HelloWebService</warName> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

[6] Test:

http://localhost:8080/HelloService/hello

http://localhost:8080/HelloService/hello?wsdl

Verwandte Themen