[jboss-user] [JBoss Seam] - Re: POJO webservices on tomcat

IGx89 do-not-reply at jboss.com
Wed Nov 14 11:56:37 EST 2007


Fortunately for you, I actually just finished spending quite a few hours researching how to run JAX-WS POJO web services in Tomcat, with success :).

First off, JBossWS 2.0 doesn't support Tomcat (though it *may* work); only 1.x does. It also seems to require web services to be bundled separately from the main application WAR (AFAIK). Because of those things, JBossWS was out of the running for me.

The only webservice framework I was able to find that supported production-quality webservices in the main WAR was Apache CXF 2.0. So far, it seems to work very nicely, though it doesn't integrate with Seam conversations (Seam only has a handler for JBossWS for that currently, though one for CXF could likely be easily created). 

I probably should write a tutorial in the Wiki for setting CXF up, but in the meantime here's how I got a basic HelloWorld up and running in my Seam app:

pom.xml (if you use Maven):
	<dependency>
  | 		<groupId>org.apache.cxf</groupId>
  | 		<artifactId>cxf-rt-frontend-jaxws</artifactId>
  | 		<version>2.0.2-incubator</version>
  | 		<exclusions>
  | 			<exclusion>
  | 				<!-- A large (2+mb) dependency that doesn't appear to be needed -->
  | 				<groupId>com.sun.xml.bind</groupId>
  | 				<artifactId>jaxb-xjc</artifactId>
  | 			</exclusion>
  | 		</exclusions>
  | 	</dependency>
  | 	<dependency>
  | 		<groupId>org.apache.cxf</groupId>
  | 		<artifactId>cxf-rt-transports-http</artifactId>
  | 		<version>2.0.2-incubator</version>
  | 	</dependency>

HelloWorld.java:
package com.demo.webservice;
  | 
  | import javax.jws.*;
  | import javax.jws.soap.SOAPBinding;
  | import javax.jws.soap.SOAPBinding.*;
  | 
  | @WebService
  | @SOAPBinding(parameterStyle=ParameterStyle.BARE)
  | public interface HelloWorld{
  |     String sayHi(@WebParam(name="addressee") String text);
  | }

HelloWorldImpl.java:
package com.demo.webservice;
  | 
  | import javax.jws.WebService;
  | 
  | @WebService(endpointInterface = "com.demo.webservice.HelloWorld", 
  |             serviceName = "HelloWorld")
  | public class HelloWorldImpl implements HelloWorld{
  | 
  |     public String sayHi(String text) {
  |         return "Hello " + text;
  |     }
  | }

cxf-servlet.xml (in WEB-INF):
<beans xmlns="http://www.springframework.org/schema/beans"
  |       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |       xmlns:jaxws="http://cxf.apache.org/jaxws"
  |       xmlns:soap="http://cxf.apache.org/bindings/soap"
  |       xsi:schemaLocation="
  | http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  | http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
  | http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
  | 
  |     <jaxws:endpoint
  |         id="hello_world"
  |         implementor="com.demo.webservice.HelloWorldImpl"
  |         address="/hello_world">
  |     </jaxws:endpoint>
  | </beans>

Added into your web.xml:
    <servlet>
  |         <servlet-name>cxf</servlet-name>
  |         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  |         <load-on-startup>1</load-on-startup>
  |     </servlet>
  |     <servlet-mapping>
  |         <servlet-name>cxf</servlet-name>
  |         <url-pattern>/services/*</url-pattern>
  |     </servlet-mapping>

That's it! Just open your browser to http://host:port/context/services/, and it should give a link to the webservice's WSDL file.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4104691#4104691

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4104691



More information about the jboss-user mailing list