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);
}
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!!!";
}
}
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;
}
}
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/"/>
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文件自动生成然后使用。
- Axis创建自己的WebService--Step by Step
- Axis创建自己的WebService--Step by Step 续
- 用eclipse创建WebService Step by Step
- 用eclipse创建WebService Step by Step
- 用eclipse创建WebService Step by Step
- 用eclipse创建WebService Step by Step
- 用eclipse创建WebService Step by Step
- 用eclipse创建WebService Step by Step
- 用eclipse创建一个WebService Step by Step
- 制作自己的Floppy-Linux Step By Step
- Step by Step-构建自己的ORM系列-开篇
- Step by Step-构建自己的ORM系列-配置管理层
- Oracle高级复制的创建配置步骤-Step by Step
- 创建Oracle10g ASM数据库Step by Step
- step by step DBCA创建Oracle数据库
- Step by Step 创建一个 Web Service
- 用Apache AXIS 开发 Web Services Step By Step(1)
- 用Apache AXIS 开发 Web Services Step By Step
- P6Spy源码分析,理解跟踪SQL的工作原理
- SQL之索引
- 自定义动画效果(Iris动画修改)
- 论坛E-mail验正的正则表达式升级
- SQL之视图
- Axis创建自己的WebService--Step by Step 续
- C#如何取硬件标志
- SQL报表之户籍管理实例
- SQL之游标
- SQL之ATM机实例
- SQL之随机函数及游标应用示例
- SQL根据GBK编码取汉字的拼音首字母的存储过程
- 绝对经典的javascript诠释
- Informix SQL函数的详细用法