最近用到了cxf的webservice组件,为外部系统提供的接口访问,对接过程中发现外部系统发过来的接口参数,在我这边竟然都是null,于是抓包分析,发现cxf产生的soap报文的格式是这样的:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:testMethod xmlns:ns1="http://test/">
<arg0>2006001</arg0>
<arg1>admin</arg1>
<arg2>admin</arg2>
<arg3>beijing</arg3>
</ns1:testMethod>
</soap:Body>
</soap:Envelope>
而外部系统发过来的soap报文格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:testMethod soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://soap.account.bossIntf.tjb.runway.com">
<in0 xsi:type="xsd:string">2006001</in0>
<in1 xsi:type="xsd:string">admin</in1>
<in2 xsi:type="xsd:string">admin</in2>
<in3 xsi:type="xsd:string">beijing</in3>
</ns1:testMethod >
</soapenv:Body>
</soapenv:Envelope>
于是询问外部系统公司人员,使用的是什么组件实现webservice,回答是axis1.4.
接着就是把接口都移植到axis组件上,axis结合spring,其实也就是获取spring的bean,首先在web.xml中配置axis的servlet:
<servlet>
<servlet-name>axis</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>axis</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>axis</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>axis</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
接着定义你的webservice的接口,继承ServletEndpointSupport,并在其onInit方法中加载Spring的bean:
public class Caculator exends ServletEndpointSupport{
protected void onInit() throws ServiceException{
service = getApplicationContext().getBean("calculatorService ");
}
public ResponseMsg caculate(int a, int b, String operation){
return service.caculate(a,b,operation);
}
}
下一步定义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="adminPassword" value="admin" />
<parameter name="sendXsiTypes" value="true" />
<parameter name="sendMultiRefs" value="true" />
<parameter name="sendXMLDeclaration" value="true" />
<parameter name="axis.sendMinimizedElements" value="true" />
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
<!-- 定义WebService的管理台 -->
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<!-- 定义你的服务接口 -->
<service name="Caculator" provider="java:RPC" use="literal">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="com.raymon.Caculator" />
<beanMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
serializer="org.apache.axis.encoding.ser.JDomElementSerializerFactory"
deserializer="org.apache.axis.encoding.ser.JDomElementDeserializerFactory"
languageSpecificType="java:com.raymon.bean.ResponseMsg"
name="ns:ResponseMsg" regenerateElement="true" xmlns:ns="urn:BeanService" />
</service>
<!-- 定义WebSerivice的系统服务。 -->
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
到此为止,webservice的服务器端已经定义结束,注意自定义返回类型ResponseMsg的配置。
客户端代码:
public static void main(String [] args){
try{
String endPoint = "http://1.1.1.1:8080/services/Caculator";
Service service = new Service();
Call call = (Call)service.createCall();
Qname qname = new Qname("urn:BeanService","ResponseMsg");
call.registerTypeMapping(ResponseMsg.class,qname,new BeanSerializerFactory(ResponseMsg.class,qname),new BeanDeserializerFactory(ResponseMsg.class,qname));
call.setReturnClass(ResponseMsg.class);
call.addParameter("in0",XMLType.XSD_INTEGER,ParameterMode.IN);
call.addParameter("in1",XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter("in2",XMLType.XSD_STRING,ParameterMode.IN);
URL url = new URL(endPoint);
call.setTargetEndpointAddress(url);
Qname caculate = new Qname(endPoint,"caculate");
call.setOperationName(caculate);
ResponseMsg response = call.invoke(new Ojbect[]{2,3,"*"});
}catch(Exception e){
e.printStackTrace();
}
}
分享到:
相关推荐
在IT行业中,构建高效、可扩展的企业级应用是至关重要的,而 Axis1.4、MyBatis3 和 Spring3 的集成则为实现这样的目标提供了一种强大的解决方案。本项目通过将这三个框架组合在一起,旨在创建一个能够提供Web服务的...
3. **创建WebService**:在Spring Boot应用中,你可以通过Axis1.4创建一个WebService。首先,定义一个Java类,包含你想要公开的方法。然后,使用Axis的工具生成服务端点接口和服务类。 4. **配置Spring Boot**:...
首先,该工程实现了spring MVC、mybatis、axis webservice功能 其次,这个工程很简单,只做了最简单的功能实现 再次,数据库要自己准备 最后,该工程里的src目录下,有一个readme.txt,请下载者仔细阅读,里面有...
在本文中,我们将深入探讨如何在Spring Boot项目中集成并使用Axis1.4来发布Web服务。Spring Boot以其简化配置和快速开发能力而受到广泛欢迎,而Axis1.4是Apache软件基金会的一个开源项目,主要用于生成和消费SOAP ...
标题中的“手把手教你用axis1.4搭建webservice”是指一篇教程,旨在指导读者如何使用Axis1.4这个开源工具来创建和部署Web服务。Axis是Apache软件基金会的一个项目,它提供了一种简单的方式来实现Java到SOAP(Simple ...
当我们需要在Spring Boot项目中集成旧版的 Axis1.4 来发布Web服务时,这通常涉及到对传统SOAP(简单对象访问协议)服务的支持。以下将详细讲解如何在Spring Boot应用中集成Axis1.4以及使用wsdd文件发布Web服务。 ...
### WebService技术应用:Spring 3 + CXF 3.4与Axis 1.4的交互 在现代软件开发中,Web服务作为一种重要的技术手段,被广泛应用于不同系统之间的通信。其中,Spring框架与Apache CXF是实现RESTful或SOAP风格的Web...
Axis1.4是Apache软件基金会提供的一个开源Web服务框架,主要用于构建和部署SOAP(Simple Object Access Protocol)服务。在本文中,我们将详细探讨Axis1.4在Web服务开发中的关键知识点。 1. **Axis1.4框架**:Axis...
标题中的“axis1.4开发webservice”指的是使用Apache Axis1.4框架创建Web服务的过程。Apache Axis是Java中广泛使用的开源工具,用于实现SOAP(简单对象访问协议)Web服务。Axis1.4是该工具的一个版本,它支持Java-to...
虽然Axis1.4相较于现代的Web服务框架(如Apache CXF、Spring-WS)可能在性能上略显逊色,但通过合理的配置和优化,依然可以在很多场景下满足性能需求。 总的来说,"web service axis1.4 jar"是一组包含所有必要库...
2. **创建 Web 服务**:在 Axis1.4 中,你可以通过编写 Java 类并使用特定的注解(如 `@WebService`)来定义 Web 服务。这个类将包含你的业务逻辑,并可以通过 SOAP 调用来访问。 3. **配置 SpringBoot**:为了使 ...
Java Web服务(Web Service)是一种基于开放标准的、平台无关的通信协议,它允许不同系统...尽管现在有更新的Web服务框架如Apache CXF和Spring-WS,但了解Axis1.4对于理解Web服务的基础原理和历史发展仍然是有价值的。
Axis1.4版本是在早期Web服务技术中广泛采用的一个实现,它允许开发者将Java类转换为Web服务,同时也支持调用远程Web服务。 Web服务是一种通过互联网交换结构化信息的方式,它允许不同系统之间的应用程序进行通信。...
在hibernate spring项目基础上通过aixs2-1.4.1把程序发布成webService,包括aixs2以对象数组和AXIOM方式处理map,list的程序代码;和aixs2-1.4-1的jar包
本教程将详细讲解如何将Web Service服务接口与Spring框架进行整合,以便在实际开发中实现高效、灵活的服务提供。 首先,让我们了解一下Web Service的基本概念。Web Service是一种软件系统,它通过使用开放标准(如...
### Axis + Webservice 教程 #### 一、环境搭建与配置 在开始学习如何使用Apache Axis构建Web服务之前,我们需要准备以下环境: - **JDK版本**:本教程使用的是JDK 1.4.2,这是当时较为常见的版本之一。 - **IDE*...
标题中的"axis1.4.jar、wsdl4j.jar和jaxrpc.jar"是与Web服务开发密切相关的Java库,主要用于创建和使用SOAP(Simple Object Access Protocol)服务。这些JAR文件是Axis1版本的一部分,Axis是Apache软件基金会的一个...
【基于Axis的Web服务示例】讲解了如何使用Apache Axis2框架开发和发布Web服务,以及如何用Java实现客户端调用。Axis2是SOAP 1.1和1.2的支持者,同时也支持RESTful Web服务和Spring、JSON等技术。在本教程中,我们将...
由于Axis支持多种扩展功能,可以通过`happyaxis.jsp`页面找到并引入相关的可选包,即使下载的Axis 1.4只有核心包,也能确保项目的完整性和功能性。 #### 三、场景描述与实现 接下来,我们通过一个具体的示例来...
1):用POJO实现0配置的WebService 2):复合类型数据的传递 3):使用services.xml文件发布WebService 4):二进制文件传输 5):会话(Session)管理 6):跨服务会话(Session)管理 7):将Spring的装配JavaBean发布成 8...