Axis创建自己的WebService--Step by Step 续

      使用工具自动生成代码,虽然比较快捷,但是产生的代码一大堆,一般人很难看懂里面的原理。而且根本不需要那么多东西在里面。只需要很简单的一个Service类,然后配置一下server-config.xml文件就可以了。
    后面将根据一个例子简单说明一下过程。

  • 1.编写WS服务接口,实现类,并根据需要编写作为参数的类。

服务接口:

package  com.lucas.busin.qdii.webservice;

public   interface  IQDIIWebService  {
    
public java.lang.String[] getTickers();

    
public String updatePoolDetail(QDIIStockPoolDetail detail);

    
public String updatePoolDetails(QDIIStockPoolDetail[] details);
}

服务实现类:

package  com.lucas.busin.qdii.webservice;

import  org.apache.log4j.Logger;

/**
 * Author:Lucas
 * Date: 2008-3-21
 * Time: 23:22:56
 
*/

public   class  QDIIWebServiceImpl  implements  IQDIIWebService  {
    
private static final Logger LOGGER = Logger.getLogger(QDIIWebServiceImpl.class);

    
public String[] getTickers(){
        
// 在这里实现业务逻辑        

        LOGGER.info(
"***************************************");
        LOGGER.info(
"QDIIWebService: getTickers() successful!!!");
        LOGGER.info(
"ticker[] size:" + tickers.length);
        LOGGER.info(
"***************************************");

        
return tickers;
    }


    
public String updatePoolDetail(QDIIStockPoolDetail detail) {        
        
// 在这里实现业务逻辑

        LOGGER.info(
"***************************************");
        LOGGER.info(
"QDIIWebService: updatePoolDetail(QDIIStockPoolDetail) successful!!!");
        LOGGER.info(
"Ticker:" + detail.getLocalTicker());
        LOGGER.info(
"***************************************");

        
return "updatePoolDetail successful!!!";
    }


    
public String updatePoolDetails(QDIIStockPoolDetail[] details) {
        
for(QDIIStockPoolDetail detail : details) {
            updatePoolDetail(detail);
        }

        LOGGER.info(
"***************************************");
        LOGGER.info(
"QDIIWebService: updatePoolDetails(QDIIStockPoolDetail[]) successful!!!");
        LOGGER.info(
"Array size:" + details.length);
        LOGGER.info(
"***************************************");

        
return "updatePoolDetails successful!!!";
    }

}

使用到的参数类QDIIStockPoolDetail:

package  com.lucas.busin.qdii.webservice;

import  java.io.Serializable;

public   class  QDIIStockPoolDetail   implements  Serializable  {
    
private java.lang.Double priceLocal;

    
private java.lang.Double mktCap;

    
public Double getPriceLocal() {
        
return priceLocal;
    }


    
public void setPriceLocal(Double priceLocal) {
        
this.priceLocal=priceLocal;
    }


    
public Double getMktCap() {
        
return mktCap;
    }


    
public void setMktCap(Double mktCap) {
        
this.mktCap=mktCap;
    }

}
  • 2.编写server-config.wsdd文件
    <? xml version="1.0" encoding="UTF-8" ?>

    < deployment  xmlns ="http://xml.apache.org/axis/wsdd/"  xmlns:java ="http://xml.apache.org/axis/wsdd/providers/java" >

      
    < globalConfiguration >

        
    < parameter  name ="sendMultiRefs"  value ="true" />

        
    < parameter  name ="disablePrettyXML"  value ="true" />

        
    < parameter  name ="dotNetSoapEncFix"  value ="true" />

        
    < parameter  name ="enableNamespacePrefixOptimization"  value ="false" />

        
    < parameter  name ="sendXMLDeclaration"  value ="true" />

        
    < parameter  name ="sendXsiTypes"  value ="true" />

      
    </ globalConfiguration >

      
    < handler  name ="LocalResponder"  type ="java:org.apache.axis.transport.local.LocalResponder" />

      
    < transport  name ="http" >

        
    < requestFlow >

          
    < handler  type ="java:org.apache.axis.handlers.http.URLMapper" />

          
    < handler  type ="java:org.apache.axis.handlers.http.HTTPAuthHandler" />

        
    </ requestFlow >

        
    < parameter  name ="qs:list"  value ="org.apache.axis.transport.http.QSListHandler" />

        
    < parameter  name ="qs:wsdl"  value ="org.apache.axis.transport.http.QSWSDLHandler" />

        
    < parameter  name ="qs.method"  value ="org.apache.axis.transport.http.QSMethodHandler" />

      
    </ transport >

      
    < transport  name ="local" >

            
    < responseFlow >

                
    < handler  type ="LocalResponder" />

            
    </ responseFlow >

      
    </ transport >

      
    < service  name ="QDIIWebService"  provider ="java:RPC" >

        
    < parameter  name ="className"  value ="com.sinitek.busin.qdii.webservice.QDIIWebServiceImpl" />

        
    < parameter  name ="allowedMethods"  value ="*" />

        
    < parameter  name ="wsdlServiceElement"  value ="QDIIWebService" />

        
    < parameter  name ="wsdlTargetNamespace"  value ="urn:QDIIWebService" />

        
    < beanMapping

            
    languageSpecificType ="java:com.sinitek.busin.qdii.webservice.QDIIStockPoolDetail"

            qname
    ="ns1:QDIIStockPoolDetail"

            xmlns:ns1
    ="urn:QDIIWebService" />

      
    </ service >

    </ deployment >
  • className:对应服务实现类
  • allowedMethods:*表示允许服务类的所有方法暴露给客户端
  • wsdlServiceElement:对应客户端看到的服务类名--比如EXCEL中用Web Service References引入WebService后看到的服务类名称
  • wsdlServicePort:
  • wsdlPortType:
  • wsdlTargetNamespace:对应用户的命名空间
  • scope:比如Session

对于自己定义的参数类,需要序列化:比如上面的beanMapping

  • languageSpecificType:参数类的全路径
  • qname:xml 命名空间:类名
  • xmlns:定义xml的命名空间

下面还有几个序列化的例子:

< typeMapping 
      
      
deserializer ="org.apache.axis.encoding.ser.BeanDeserializerFactory"  
      
      encodingStyle
="http://schemas.xmlsoap.org/soap/encoding/"  

      serializer
="org.apache.axis.encoding.ser.BeanSerializerFactory"  

      type
="java:com.sinitek.busin.qdii.webservice.QDIIStockPoolDetail"  

      qname
="ns1:QDIIStockPoolDetail"  

      xmlns:ns1
="urn:QDIIWebService" />

< arrayMapping 
   
      
innerType ="ns2:QDIIStockPoolDetail"  
    
      languageSpecificType
="java:com.sinitek.busin.qdii.webservice.QDIIStockPoolDetail[]"  

      qname
="ns2:ArrayOfQDIIStockPoolDetail"

      xmlns:ns2
="urn:QDIIWebService" />

< arrayMapping 

       
innerType ="soapenc:string"

       languageSpecificType
="java:java.lang.String[]"  

       qname
="ns3:ArrayOf_soapenc_string"  

       xmlns:ns3
="urn:QDIIWebService"

       xmlns:soapenc
="http://schemas.xmlsoap.org/soap/encoding/" />

 

  • 3.以上文件准备好以后,启动web服务器。通过网址http://localhost:port/services查看发布的web服务。
  • 4.访问web service
  • 4.1使用vb访问:通过web service references找到服务
  • 4.2使用java访问:如上一篇所讲,通过wsdl文件自动生成然后使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值