2010-03-07 21 views
10

Tengo un servicio web y lo estaba implementando en GlassFish. Accedí a su wsdl a través del http://localhost:10697/APIService/APIServiceService?wsdl.accediendo a wsdl en Tomcat

Ahora porté el archivo WAR a un Tomcat 6.0.24 y se implementó. Sin embargo, estoy tratando de acceder a su wsdl usando http://localhost:8080/APIService/APIServiceService?wsdl pero obtengo un error 404. Intenté varias combinaciones, pero ninguna parece funcionar.

¿Cómo puedo acceder al archivo wsdl por favor?

Gracias y saludos,

Actualización: Aquí son: web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

no puedo encontrar sun-jaxws.xml sin embargo ... Muchas gracias! Saludos

Respuesta

20

La forma de acceder a un WSDL no es realmente específica del contenedor, es más específica de WS-stack. WS-stack en GlassFish es Metro (Metro = JAX-WS RI + WSIT). ¿Instaló/desplegó Metro o JAX-WS RI en Tomcat? Consulte Metro on Tomcat 6.x o Running JAX-WS Samples with Tomcat 6.x (JAX-WS RI podría ser suficiente en su caso) para conocer los pasos.

Actualización: tiene que declarar el WSServlet en el web.xml (ver Deploying Metro endpoint):

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <listener> 
    <listener-class> 
    com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
    </listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>WebServicePort</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>WebServicePort</servlet-name> 
    <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
    <session-timeout>60</session-timeout> 
    </session-config> 
</web-app> 

Y luego en el sun-jaxws.xml (también envasados ​​en WEB-INF), declare su Punto final de servicio Interface (SEI):

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

Y se accede a la WSDL en:

http://localhost:8080/<mycontext>/services/hello?wsdl 
      A    B   C  D 
  • A es el host y el puerto del contenedor de servlet.
  • B es el nombre del archivo war.
  • C proviene del elemento url-pattern en el archivo web.xml.
  • D proviene de la raíz final del atributo url-pattern en el archivo sun-jaxws.xml.
+0

Hmm ... no sabía nada de esto. Sry todavía soy un estudiante. Echaré un vistazo para instalar Metro en Tomcat. Gracias por la visión! Saludos, Krt_Malta –

+0

@Krt_Malta No hay problema. He agregado algunos consejos que explican cómo hacerlo (suponiendo que esté utilizando Tomcat 6.x, que sería mi recomendación). –

+0

Hmm ... sin suerte. Instalé el metro según http://blogs.oracle.com/arungupta/entry/metro_on_tomcat_6_x, reinicié Tomcat (que es Tomcat 6.0.24) y volví a copiar el archivo de guerra, pero estoy hasta obtener un error 404 cuando tratando de acceder al archivo wsdl. Alguna idea, por favor? 10x. Krt_Malta –