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

来源:互联网 发布:淘宝众筹服务商 编辑:程序博客网 时间:2024/05/21 16:29

      使用工具自动生成代码,虽然比较快捷,但是产生的代码一大堆,一般人很难看懂里面的原理。而且根本不需要那么多东西在里面。只需要很简单的一个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文件自动生成然后使用。
原创粉丝点击