打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SEAM中集成使用WebService的整体流程
最近项目要求开发一个WebService接口给用户。
之前从未接触过WS,于是上网查、seam群里请教大虾,今日终于修成正果。
现将详尽步骤总结如下:
总的来说,WS编程分为两部分:WS接口端和模拟客户端。难度并不是WS技术本身,而是你的开发环境和WS如何进行结合。
先说下我的WEB环境是SEAM。WEB APP 服务器是Jboss423GA。如何在SEAM中集成使用WS,是我首先输入google的key word。
下面真正的开始我的步骤,看好了!
(一)服务端接口的开发
1.   WebService 类:
@WebService
public class TestService {
 @WebMethod
    public List<Object[]> testWebServ(){ 
        TestSeamComp comp = (TestSeamComp) Component.getInstance(TestSeamComp.class,true); 
        return comp.test(); 
    } 
注意:
其中使用了关键的WS的注解:@WebService 和  @WebMethod
然后调用了一个seam组件:TestSeamComp。这样的好处是什么?SEAM相关的文档说的好啊:“WS只是将SEAM组件进行了包装,具体的业务是在SEAM组件中进行的”。
如2所示代码:
 
2.   被调用的Seam组件TestSeamComp:
@Name("testSeamComp") 
@AutoCreate
public class TestSeamComp {
 @In("entityManager")
 private EntityManager em;
 public List<Object[]> test(){
        List<Object[]> bides = (List<Object[]>) em.createNativeQuery("select * from d_Service s").getResultList();
        return bides;
    } 
}
这个组件类就不多说了!
 
3.   接下来是seam环境中进行一些配置。
首先是在META-INFO中增加一个standard-jaxws-endpoint-config.xml文件,具体内容如下:
<jaxws-config xmlns="urn:jboss:jaxws-config:2.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:javaee="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2.1.xsd">
   <endpoint-config>
      <config-name>Seam WebService Endpoint</config-name>
      <pre-handler-chains>
         <javaee:handler-chain>
            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
            <javaee:handler>
               <javaee:handler-name>SOAP Request Handler</javaee:handler-name>
               <javaee:handler-class>org.jboss.seam.webservice.SOAPRequestHandler</javaee:handler-class>
            </javaee:handler>
         </javaee:handler-chain>
      </pre-handler-chains>
   </endpoint-config>
</jaxws-config>
其实是一个WS的SOAP请求处理器。
之后是web.xml中增加两个配置:
……
  <servlet> 
   <servlet-name>TestService Servlet</servlet-name> 
   <servlet-class>com.test.service.TestService</servlet-class> 
   <load-on-startup>1</load-on-startup> 
  </servlet> 
  
  <servlet-mapping> 
     <servlet-name>TestService Servlet</servlet-name> 
     <url-pattern>/TestService</url-pattern> 
  </servlet-mapping> 
……
以及:
……
     <filter>
          <filter-name>Seam Servlet Filter</filter-name>
          <filter-class>org.jboss.seam.servlet.SeamServletFilter</filter-class>
      </filter>
  
      <filter-mapping>
          <filter-name>Seam Servlet Filter</filter-name>
          <url-pattern>/TestService</url-pattern>
      </filter-mapping>
……
 
最后还要在component.xml中增加一个配置:
<web:context-filter url-pattern="/TestService/*"/>
ok ,至此所有配置都已完成。
4.   启动Jboss app server,浏览器中输入:http://localhost:8080/myproject/TestService?wsdl
可以看到一个结果如下:
那就证明WS服务发布成功了!
 
(二)Client测试
首先利用JDK6中wsimport工具生成client代码。
1.   cmd
2.   E:\wsclientest>wsimport -s generate http://localhost:8080/stat/TestService?wsdl
3.   将E:\wsclientest\generate 下的java文件拷贝到eclipse中新建的java project里。注意包名。
4.   相同包下,新建一个test类,如下代码:
 public static void main(String[] args) {
  TestServiceService tss = new TestServiceService();
     TestService ts = tss.getTestServicePort();
     List<AnyTypeArray>  resultList= ts.testWebServ();
     for (AnyTypeArray objectAA : resultList) {
      List<Object> objectAAEach  =objectAA.getItem();
      System.out.println(objectAAEach.get(1));
     }
 }
 
5.   run as application
6.   成功!
 
(三) ok了!
(四) 测试过程中遇到的问题集锦:
 1. 从client application 中测试调用服务端接口报错如下:
      java.lang.UnsupportedOperationException: “setProperty must be overridden by all subclasses of SOAPMessage”
      原因:Jboss的soap实现的是老的javax.xml.soap.SoapMessage接口,这个接口的setProperty方法在老版本是不需要override的,但是到了Java6,
               由于Java6的jdk本身自带soap包,而自带的这个包的SoapMessage接口对setProperty方法又强制其实现类要override自身,否则则抛出上述异常。
      问题解决方式:把${JBOSS_HOME}/lib/中除了getopt.jar, jboss-system.jar, jboss-jmx.jar其他所有的jar拷贝进${JBOSS_HOME}/lib/endorsed,同时拷贝${JBOSS_HOME}/client/目录中的jboss-saaj.jar ,jboss-jaxrpc.jar到${JBOSS_HOME}/lib/endorsed目录下,这样服务器将使用jboss自带的老版本,经验证有效。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
J2ME与WebService-KSOAP的罗曼史
JBoss、Geronimo及Tomcat比较分析-华军资讯
JBoss,Geronimo还是Tomcat?——三种开源Java应用服务器的比较
深入浅出JBoss Seam
JAVA webservice之CXF
CXF创建webservice客户端和服务端
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服