JBoss 4.0 中使用web service

原创 2005年05月28日 14:32:00

大致过程

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();
  }


Eclipse + Jboss + CXF构建Web Service服务

搭建Web Service需要的以下支持; 1. CXF

使用CXF为Web Service添加拦截器,自定义拦截器

拦截器分为Service端和Client端      拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理。分为CXF自带的拦截器和自定义的拦截器   ...

C++中使用soap toolkit访问Web Service

  • 2016年08月08日 08:57
  • 65KB
  • 下载

基础平台使用手册-Web Service

  • 2014年09月26日 13:04
  • 127KB
  • 下载

分别使用Jmeter/Loadrunner/SoapUI做Web Service接口测试的简单操作

1.Jmerer做Web Service接口测试 1)添加并发用户数: 添加线程组,修改自己需要的线程数和循环次数   2)添加查看结果树/聚合报告/图形结果/响应断言等   3)添加...

在Windows 8中使用web service的例子

  • 2014年08月31日 12:45
  • 260KB
  • 下载

Apache CXF实战之九 发布使用SSL的Web Service

在使用Web Service的时候,在很多情况下会要求我们发布ssl的web service,此时如果web service是作为一个war包部署在tomcat之类的web容器中的时候,我们可以通过修...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JBoss 4.0 中使用web service
举报原因:
原因补充:

(最多只允许输入30个字)