1.先写服务类,内容如下:
public class StockQuoteService {
private HashMap map = new HashMap();
public Man getPrice(String symbol) {
Double price = (Double) map.get(symbol);
Man man = new Man(42.2);
man.setName("kevin");
man.setSex("man");
return man;
}
public void update(String symbol, double price) {
map.put(symbol, new Double(price));
}
}
2.用ant生成wsdl,xsd,binding.xml,内容如下:
<project name="quickstart" basedir="." default="generate-wsdl">
<property name="jibx-home" value="C:\Users\Kevin\Downloads\jibx_1_2_3\jibx" />
<path id="jibx-classpath">
<fileset dir="${jibx-home}/lib" includes="**/*.jar" />
<pathelement location="bin" />
</path>
<!-- Generate bindings, schemas, and WSDL -->
<target name="generate-wsdl">
<delete quiet="true" dir="${basedir}/gen" />
<mkdir dir="${basedir}/gen" />
<echo message="Running Jibx2Wsdl tool" />
<java classpathref="jibx-classpath" classname="org.jibx.ws.wsdl.tools.Jibx2Wsdl" fork="true" failonerror="true">
<arg value="-p" />
<arg value="target/classes" />
<arg value="-s" />
<arg value="src/main/java" />
<arg value="-t" />
<arg value="${basedir}/gen" />
<arg value="--strip-prefixes=ns" />
<arg value="com.kevin.StockQuoteService" />
</java>
</target>
</project>
3.用ant生成service代码,ant内容如下:
<project name="quickstart" basedir="." default="generate.wsdl">
<property environment="env" />
<property name="project.home" value="src/main/webapp" />
<property name="resource.path" value="src/main/resources" />
<property name="build.dir" value="target" />
<path id="axis2.classpath">
<fileset dir="${project.home}/WEB-INF/lib">
<include name="*.jar" />
</fileset>
</path>
<path id="client.lib">
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</path>
<target name="generate.wsdl">
<java classname="org.apache.ws.java2wsdl.Java2WSDL" fork="true" classpathref="axis2.classpath">
<arg line="-cp target/classes" />
<arg line="-cn com.kevin.StockQuoteService" />
<arg line="-of ${resource.path}/META-INF/StockQuoteService.wsdl" />
</java>
</target>
<target name="generate.service">
<java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true" classpathref="client.lib">
<arg line="-s" />
<arg line="-ss" />
<arg line="-uw" />
<arg line="-sd" />
<arg line="-ssi" />
<arg line="-ap" />
<arg line="-S" />
<arg line="-l java" />
<arg line="-p com.kevin.service" />
<arg line="-d jibx" />
<arg line="-noBuildXML" />
<arg line="-o src/main/java" />
<arg line="-sp" />
<arg line="-Ebindingfile ${resource.path}/META-INF/binding.xml" />
<arg line="-uri ${resource.path}/META-INF/StockQuoteService.wsdl" />
</java>
<delete dir="src/main/java/resources" />
</target>
<target name="generate.aar">
<jar destfile="${project.home}/WEB-INF/services/StockQuoteService.aar">
<fileset excludes="**/Test.class, *.properties" dir="${build.dir}/classes">
</fileset>
</jar>
</target>
<target name="generate.client">
<java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true" classpathref="client.lib">
<arg line="-S" />
<arg line="-s" />
<arg line="-uw" />
<arg line="-noBuildXML" />
<arg line="-p com.kevin.client" />
<arg line="-d jibx" />
<arg line="-o src/main/java" />
<arg line="-sp" />
<arg line="-Ebindingfile ${resource.path}/META-INF/binding.xml" />
<arg line="-uri ${resource.path}/META-INF/StockQuoteService.wsdl" />
</java>
</target>
</project>
4.在生成的service代码中,在类StockQuoteServiceSkeleton中加入业务代码,参照StockQuoteService.
5.增加service.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<service name="StockQuoteService" scope="application">
<description>
Stock Quote Sample Service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="com.kevin.service.StockQuoteServiceMessageReceiverInOut" />
</messageReceivers>
<parameter name="ServiceClass">
com.kevin.service.StockQuoteServiceSkeleton
</parameter>
<module ref="rampart" />
<module ref="addressing" />
<wsp:Policy wsu:Id="UTOverTransport"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false" />
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128 />
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax />
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp />
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordCallbackClass>com.kevin.PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
</service>
6.生成aar文件,可以不包含*.class文件,拷至WEB-INF/services文件夹中。
7.生成client文件,并拷至client端。
8.客户端调用程序:
public static void main(String[] args) {
try {
ConfigurationContext ctx = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(
"src/main/webapp/WEB-INF", null);
StockQuoteServiceStub stub = new StockQuoteServiceStub(ctx,
"https://localhost:8443/axis2/services/StockQuoteService");
ServiceClient sc = stub._getServiceClient();
Options options = sc.getOptions();
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY,
loadPolicy("policy.xml"));
sc.setOptions(options);
sc.engageModule("addressing");
sc.engageModule("rampart");
getPrice(stub);
// update(stub);
// getPrice(stub);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getPrice(StockQuoteServiceStub stub) {
try {
Man man = stub.getPrice("CDE");
System.out.println(man.getName());
System.out.println(man.getSex());
System.out.println(man.getPrice());
} catch (Exception e) {
e.printStackTrace();
System.err.println("\n\n\n");
}
}
public static void update(StockQuoteServiceStub stub) {
try {
stub.update("CDE", new Double(42.35));
System.err.println("price updated");
} catch (Exception e) {
e.printStackTrace();
System.err.println("\n\n\n");
}
}
private static Policy loadPolicy(String xmlPath) throws Exception {
StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
return PolicyEngine.getPolicy(builder.getDocumentElement());
}
9.其中policy.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:user>alice</ramp:user>
<ramp:passwordCallbackClass>com.kevin.client.PWCBHandler</ramp:passwordCallbackClass>
<ramp:sslConfig>
<ramp:property name="javax.net.ssl.trustStore">client.jks</ramp:property>
<ramp:property name="javax.net.ssl.trustStorePassword">apache</ramp:property>
</ramp:sslConfig>
</ramp:RampartConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
分享到:
相关推荐
Apache Axis2和CXF都是Java世界中非常知名的Web服务框架,它们主要用于构建和部署Web服务。两者各有特色,适用于不同的应用场景。以下是对这两个框架特点、区别及适用场合的详细对比,以及它们在效率上的表现。 1. ...
通过Spring、Axis2和XFire的整合,开发者可以利用Spring的高级特性,如依赖注入和AOP,以及Axis2和XFire的Web服务处理能力,构建出高效、可扩展且易于维护的Web服务系统。这种组合不仅提供了丰富的功能,还保持了...
开发者可以使用这些代码来理解Axis2-Web的工作原理,或者在自己的项目中集成和自定义Axis2-Web。 以下是关于Apache Axis2-Web的一些核心知识点: 1. **Web服务架构**:Axis2-Web基于服务导向架构(SOA),允许...
7. **集成性**:Axis2可以轻松地与EJB、Spring等企业级框架集成,便于构建复杂的企业应用。 压缩包内的"axis2-1.3"目录可能包含以下部分: - **samples**:各种示例服务和客户端代码,展示如何创建、部署和调用Web...
- **Axis2**:支持多种序列化机制,如XMLBeans、JiBX、JaxMe和JAXB等,但在与Spring框架的集成上不如CXF方便。 - **CXF**:与Spring框架有着很好的集成,能够很好地利用Spring的各种特性,如依赖注入、事务管理等...
在Java Web服务开发领域,Apache Axis2和Apache CXF都是广泛使用的框架,但它们各自有着不同的定位和特点。下面是关于Axis2和CXF的详细比较,以及如何使用它们来创建和发布Web服务。 1. 对比 Axis2 和 CXF Axis2是...
标题中的“TipTec.Developing.Web.Services.with.Apache.CXF.and.Axis2.Jan.2010”表明这是一份关于使用Apache CXF和Axis2开发Web服务的教程资料,发布于2010年1月。Apache CXF和Axis2是两个流行的Java框架,用于...
5. **扩展性**:Axis支持多种扩展机制,如JavaBeans Activation Framework (JAF)、Java Architecture for XML Binding (JAXB) 和 JiBX 等,可以方便地与各种数据绑定技术集成。 6. **错误处理和调试**:Axis提供了...
Java之Web服务开发方法论图解主要探讨了两种在Java平台上构建Web服务的主流技术框架:Axis2和CXF。Web服务是一种通过网络提供和消费的标准化接口,它使用XML(标准通用标记语言的子集)和SOAP(简单对象访问协议)...
对比AXIS2和CXF,AXIS2是Axis1.x系列的升级版,采用了全新的模块化架构以增强扩展性。尽管AXIS2在某些方面可能不如CXF成熟,例如不支持WS-Policy(但计划在未来版本中添加),但AXIS2提供了更广泛的数据绑定选项。另...
【描述】:“这两个框架都允许要么从已有的 Java 代码开始构建 Web 服务(但是,除非使用 Jibx2Wsdl 之类的单独的工具,否则 Axis2 对这种方法的支持有限” 本文将深入探讨Java Web服务中的一个重要工具——Metro,...
XFire还提供了灵活的Binding机制,包括Acegis、xmlbeans、jaxb2和castor等多种选项。 在XFire与Axis2的对比中,尽管两者都被视为新一代的Web Service平台,但XFire在稳定性和性能上似乎更胜一筹。Axis2的1.0版本被...
Web Service开源工具是服务导向架构(SOA)中不可或缺的一部分,Apache CXF和Apache AXIS2是两个备受关注的开源框架,它们为...总的来说,AXIS2和CXF各有优势,选择哪个取决于具体项目的技术栈、性能需求和团队偏好。
- 考虑到Axis2和XFire都支持POJO风格的WebServices,它们在这一方面具有相似性。 - 由于XFire和Axis2都得到了Apache的支持,因此在社区和资源方面都非常丰富。 #### 四、Axis2与CXF的比较 文档中还提到了Axis2与...