JBoss 4.0 中使用web service

大致过程

1. 安装Jboss
2. 将webservice endpoint当成servlet
3. 写一个远端的interface
4. 在eclipse中配置一个external tool:wscompile
4. 写一个config.xml, 然后用JWSDP的JAXRPC中的wscompile生成mapping.xml和wsdl
5. 必须存在4个文件:web.xml,webservices.xml,mapping.xml和.wsdl
6. webservices 中的port name 要和.wsdl中的一致
7. 使用lomboz或jbossIDE deploy

详细实例:

1. create a class

package service;


public class Hello {
 public boolean helloDancy(String hello){
  System.out.println(hello);
  return true;
 }

}

2. create corresponding remote interface

package remote;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface HelloRemote extends Remote {
 public boolean helloDancy(String hello) throws RemoteException;
}

3. create web.xml in WEB-INF folder

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <servlet>
  <servlet-name>helloServlet</servlet-name>
  <servlet-class>service.Hello</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>helloServlet</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>
</web-app>

4. create config.xml 

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
 <service name="helloservice"
  targetNamespace="/hello"
  typeNamespace="/hello/types"
        packageName="service">
  <interface name="remote.HelloRemote" />
 </service>
</configuration>

5. create folder wsdl in WEB-INF/ and run wscompile from jaxrpc folder in sun's jwsdp1.5 package

  wscompile -cp output/classes -gen:server -f:documentliteral -mapping jaxrpc-mapping.xml -keep config.xml

-keep: keep the generated source file

6. After executing wscompile.bat, a mapping.xml and helloservice.wsdl are generated

7. create webservice.xml

<?xml version="1.0" encoding="UTF-8"?>

<webservices xmlns="http://java.sun.com/xml/ns/j2ee
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1">
 
 <webservice-description>
  <webservice-description-name>hello world</webservice-description-name>
  <wsdl-file>WEB-INF/wsdl/helloservice.wsdl</wsdl-file>
        <jaxrpc-mapping-file>WEB-INF/mapping.xml</jaxrpc-mapping-file>
        <port-component>
            <port-component-name>hello-dancy</port-component-name>
            <wsdl-port>HelloRemotePort</wsdl-port>
            <service-endpoint-interface>remote.HelloRemote</service-endpoint-interface>
            <service-impl-bean>
                <servlet-link>helloServlet</servlet-link>
            </service-impl-bean>
        </port-component>
 </webservice-description>
</webservices>

8. create hello.war and deploy it to jboss4.0.1

9. create test client

public void testHelloDancy() {
  try{
   String urlstr   = "http://w20251-01:8080/hellows/hello?wsdl";
        
         java.net.URL url =  new java.net.URL(urlstr);

         String ns        = "/hello";
         QName  qname     = new QName(ns, "Helloservice");
         QName  port      = new QName(ns, "HelloRemotePort");
         QName  operation = new QName(ns, "helloDancy");

         Service service = new Service();
         Call call    = (Call)service.createCall();

            call.setTargetEndpointAddress( url );
            call.setOperationName( operation );
            call.addParameter( "String_1", XMLType.XSD_BASE64, ParameterMode.IN);
           
            call.setReturnType( XMLType.XSD_BOOLEAN);
         Boolean ret = (Boolean)call.invoke(new Object[]{"hello, Dancy".getBytes()});

  } catch(Exception e){
   e.printStackTrace();
  }
  
  
 }

10. set the classpath to lead to jars in axis's lib folder

11. customized object which involve byte[] as the input parameter
  client code:
 
   public void testHelloDancy() {
  try{
   String urlstr   = "http://w20251-01:8080/hellows/hello?wsdl";
        
         java.net.URL url =  new java.net.URL(urlstr);

         String ns        = "/hello";
         QName  qname     = new QName(ns, "Helloservice");
         QName  port      = new QName(ns, "HelloRemotePort");
         QName  operation = new QName(ns, "helloDancy");

         Service service = new Service();
         Call call    = (Call)service.createCall();
         QName    qn      = new QName( "/hello/types", "Dto" ); //refer to .wsdd
         call.registerTypeMapping(service.Dto.class, qn,
                       new org.apache.axis.encoding.ser.BeanSerializerFactory(service.Dto.class, qn),       
                       new org.apache.axis.encoding.ser.BeanDeserializerFactory(service.Dto.class, qn));       

            call.setTargetEndpointAddress( url );
            call.setOperationName( operation );
            call.addParameter( "arg0", qn, ParameterMode.IN);
           
            call.setReturnType( XMLType.XSD_BOOLEAN);
            service.Dto dto = new Dto();
            dto.setParam("hello, Dancy".getBytes());
         Boolean ret = (Boolean)call.invoke(new Object[]{dto});

  } catch(Exception e){
   e.printStackTrace();
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值