http://javaresearch.org/article/116761.htm)”简要地总结了jax-ws 2.0/2.1 及其在Glassfish v2 上的部署.." /> 在JBoss4.2及JBoss5.0上部署jax-ws 2.0/2.1 Web Servi..
首页 文章 JBoss 在JBoss4.2及JBoss5.0上部署jax-ws 2.0/2.1 Web Servi..

邮件订阅

在JBoss4.2及JBoss5.0上部署jax-ws 2.0/2.1 Web Servi.. E-mail
用户评价: / 1
好 
作者:Administrator   
2009-04-12 11:25

前文“折腾了一把 JAX-WS, SOA & Java EE 5(http://javaresearch.org/article/116761.htm)”简要地总结了jax-ws 2.0/2.1 及其在Glassfish v2 上的部署情况。最近又试着将该POJO web service打包成war部署到JBoss上(同样的war部署在Glassfish上运行良好)。下面是小结:

一,部署jax-ws 2.0/2.1 POJO Web Service到JBoss4.2.2.GA

1:必须为你的POJO Web Service定义一个Servlet,并定义service的endpoint。
这意味着必须修改/增加两个文件:WEB-INF/web.xml;WEB-INF/sun-jaxws.xml (附文后)

2:最好将所需的jax-ws jars放到WEN-INF/lib里,免得将这些jar拷贝来拷贝去。
本人曾试了半天,拷来拷去,反正是搞不定。最后还是一古脑儿索性全放到WEB-INF/lib里,倒是爽快:

WEB-INF/lib/jaxws-rt.jar
WEB-INF/lib/jaxws-tools.jar
WEB-INF/lib/log4j-1.2.8.jar
WEB-INF/lib/saaj-api.jar
WEB-INF/lib/saaj-impl.jar
WEB-INF/lib/sjsxp.jar
WEB-INF/lib/stax-ex.jar
WEB-INF/lib/streambuffer.jar
WEB-INF/lib/sxalan.jar

别问我到底哪个是哪个,都是干什么的。

二,部署jax-ws 2.0/2.1 POJO Web Service到JBoss5.0.0.GA

好像是去年,JBoss5面世了,根据其Release Note,它是“the final release of the JBoss 5.0 series for the Java EE™5 codebase that fully complies with the Java EE 5 conformance testing certification requirements.”但本人的试验结果却是大失所望:如果将我们的web service打包成war部署到JBoss 5.0上,根本就不工作,问题多去了。为什么同样的war部署在Glassfish上就运行良好呢?果真是“fully complies with the Java EE 5 ”?看起来并不那么“fully”。

JBoss5.0.0.GA的server classloader搜寻路径发生了一点变化。根据其Release Note的“指示”:“When running under Java 6 you need to manually copy the following libraries from the JBOSS_HOME/client directory to the JBOSS_HOME/lib/endorsed directory, so that the JAX-WS 2.0 apis supported by JBossWS are used: 

jbossws-native-saaj.jar 
jbossws-native-jaxrpc.jar 
jbossws-native-jaxws.jar 
jbossws-native-jaxws-ext.jar ”

这个也无济于事。

最终,还得像部署在JBoss4.2.2.GA上一样进行部署。

总结:
1:将jax-ws 2.0/2.1 POJO web service部署得到JBoss4.2/5.0是一样费劲的。
2:基本上需要两步:一是要定义WEB-INF/web.xml 和 WEB-INF/sun-jaxws.xml;二是要将所需的相关的 ws libs 放到war的本地classpath上。
3:还发现一个怪现象:@WebService attribute 是否附值与附哪些值,JBoss与 Glassfish所由此产生的wsdl内容很不相同。这有点儿头痛。

Why JBoss then? 答案是我儿子的口头禅:“我也不知道!”。

附上相关文件:

{code}
----------------------- service interface: VodOptService ------------------

package com.vodws.service.opt;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import com.vodws.service.GetPersonRequest;
import com.vodws.service.GetPersonResponse;

@WebService
@SOAPBinding(
     style = SOAPBinding.Style.DOCUMENT,
     use = SOAPBinding.Use.LITERAL,
     parameterStyle=SOAPBinding.ParameterStyle.BARE
)
public interface VodOptService {
  
  @WebMethod
  @WebResult( name="getPersonResponse",
              targetNamespace="http://www.vodws.com/service",
              partName="getPersonResponse" )
  public GetPersonResponse getPerson( @WebParam(name="getPersonRequest", 
                                                targetNamespace="http://www.vodws.com/service", 
                                                partName="getPersonRequest" )
                                      GetPersonRequest request);
}

--------------------- service implementation: VodOptServiceImp -----------------

package com.vodws.service.opt;

import java.util.ArrayList;
import javax.jws.WebService;
import org.apache.log4j.Logger;
import com.vodws.service.GetPersonRequest;
import com.vodws.service.GetPersonResponse;
import com.vodws.service.Person;
import com.vodws.service.ServiceResponse.ServiceMessage;

@WebService(serviceName="optsvs", endpointInterface="com.vodws.service.opt.VodOptService")
public class VodOptServiceImp implements VodOptService {
  
  private static final Logger log = Logger.getLogger(VodOptServiceImp.class);
  private static final String MSISDN = "6421123456";
  
  public GetPersonResponse getPerson(GetPersonRequest request) {
    
    GetPersonResponse response = new GetPersonResponse();
    
    if(request == null) {
      log.error("john, service request is null");
      
      ServiceMessage.Message msg = new ServiceMessage.Message();
      msg.setContent("Sorry, request is null");
      msg.setLevel("ERROR");
      
      ArrayList<ServiceMessage.Message> msglist = new ArrayList<ServiceMessage.Message>();
      msglist.add(msg);

      ServiceMessage error = new ServiceMessage();
      error.getMessages().addAll(msglist);
      
      response.setServiceMessage(error);
      
      return response;
    }
    
    String msisdn = request.getMsisdn();
    log.debug("Getting person for msisdn: " + msisdn);
    
    Person person = new Person();
    person.setFirstName("jason");
    person.setLastName("wang");
    person.setMsisdn(MSISDN);
    
    response.setPerson(person);
    
    return response;
  }
}

-------------------- WEB-INF/web.xml ----------------------
<?xml version="1.0" encoding="UTF-8"?>
<!-- servlet 2.5, jsp 2.1 -->
<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>vodws</display-name>
  <description>vodws</description>
  
  <!-- jwang, 2009-03-24: necessary if deploying to JBoss 4.2.x, not required for Glassfish 2 -->
  <listener>
    <listener-class>
        com.sun.xml.ws.transport.http.servlet.WSServletContextListener
    </listener-class>
   </listener>
  
  <servlet>
    <description>vod opt web service</description>
      <display-name>vod opt web service</display-name>
    <servlet-name>VodOptService</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>VodOptService</servlet-name>
     <url-pattern>/optsvs</url-pattern>
  </servlet-mapping>

  <!-- othe web.xml content...-->

</web-app>

-------------------- WEB-INF/sun-jaxws.xml -------------------
<?xml version="1.0" encoding="UTF-8"?>

<!-- jwang 2009-03-24: this file is required if deploying to JBoss-4.2.x. not required for Glassfish 2 -->
<endpoints
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">
    
    <endpoint
        name="VodOptService"
        implementation="com.vodws.service.opt.VodOptServiceImp"
        service="{http://www.vodws.com/service}VodOptService"
        port="{http://www.vodws.com/service}VodOptService"
        url-pattern="/optsvs" />
</endpoints>
{code}


最后更新于: 2009-04-12 11:25
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)

其他相关文章