`
forhope
  • 浏览: 367056 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

Axis1.4+Spring的webservice实现

 
阅读更多
最近用到了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();
   }
}
1
1
分享到:
评论
1 楼 tangduDream 2012-03-19  
能给个实例 么,谢谢,,

相关推荐

    axis1.4+mybatis3+spring实现webservice

    在IT行业中,构建高效、可扩展的企业级应用是至关重要的,而 Axis1.4、MyBatis3 和 Spring3 的集成则为实现这样的目标提供了一种强大的解决方案。本项目通过将这三个框架组合在一起,旨在创建一个能够提供Web服务的...

    springboot+axis1.4

    3. **创建WebService**:在Spring Boot应用中,你可以通过Axis1.4创建一个WebService。首先,定义一个Java类,包含你想要公开的方法。然后,使用Axis的工具生成服务端点接口和服务类。 4. **配置Spring Boot**:...

    mybatis+spring MVC+webservice axis例子程序实现

    首先,该工程实现了spring MVC、mybatis、axis webservice功能 其次,这个工程很简单,只做了最简单的功能实现 再次,数据库要自己准备 最后,该工程里的src目录下,有一个readme.txt,请下载者仔细阅读,里面有...

    springboot使用axis1.4的demo

    在本文中,我们将深入探讨如何在Spring Boot项目中集成并使用Axis1.4来发布Web服务。Spring Boot以其简化配置和快速开发能力而受到广泛欢迎,而Axis1.4是Apache软件基金会的一个开源项目,主要用于生成和消费SOAP ...

    手把手教你用axis1.4搭建webservice

    标题中的“手把手教你用axis1.4搭建webservice”是指一篇教程,旨在指导读者如何使用Axis1.4这个开源工具来创建和部署Web服务。Axis是Apache软件基金会的一个项目,它提供了一种简单的方式来实现Java到SOAP(Simple ...

    Springboot集成axis1.4的demo

    当我们需要在Spring Boot项目中集成旧版的 Axis1.4 来发布Web服务时,这通常涉及到对传统SOAP(简单对象访问协议)服务的支持。以下将详细讲解如何在Spring Boot应用中集成Axis1.4以及使用wsdd文件发布Web服务。 ...

    webservice :spring 3+cxf3.4服务方,AXIS1.4请示方调用

    ### WebService技术应用:Spring 3 + CXF 3.4与Axis 1.4的交互 在现代软件开发中,Web服务作为一种重要的技术手段,被广泛应用于不同系统之间的通信。其中,Spring框架与Apache CXF是实现RESTful或SOAP风格的Web...

    webservice axis1.4 开发资料

    Axis1.4是Apache软件基金会提供的一个开源Web服务框架,主要用于构建和部署SOAP(Simple Object Access Protocol)服务。在本文中,我们将详细探讨Axis1.4在Web服务开发中的关键知识点。 1. **Axis1.4框架**:Axis...

    axis1.4开发webservice

    标题中的“axis1.4开发webservice”指的是使用Apache Axis1.4框架创建Web服务的过程。Apache Axis是Java中广泛使用的开源工具,用于实现SOAP(简单对象访问协议)Web服务。Axis1.4是该工具的一个版本,它支持Java-to...

    web service axis1.4 jar

    虽然Axis1.4相较于现代的Web服务框架(如Apache CXF、Spring-WS)可能在性能上略显逊色,但通过合理的配置和优化,依然可以在很多场景下满足性能需求。 总的来说,"web service axis1.4 jar"是一组包含所有必要库...

    Springboot,axis1.4的demo

    2. **创建 Web 服务**:在 Axis1.4 中,你可以通过编写 Java 类并使用特定的注解(如 `@WebService`)来定义 Web 服务。这个类将包含你的业务逻辑,并可以通过 SOAP 调用来访问。 3. **配置 SpringBoot**:为了使 ...

    javawebservice开发 最简直接放tomcat下的axis1.4

    Java Web服务(Web Service)是一种基于开放标准的、平台无关的通信协议,它允许不同系统...尽管现在有更新的Web服务框架如Apache CXF和Spring-WS,但了解Axis1.4对于理解Web服务的基础原理和历史发展仍然是有价值的。

    axis1.4 websercie开发包

    Axis1.4版本是在早期Web服务技术中广泛采用的一个实现,它允许开发者将Java类转换为Web服务,同时也支持调用远程Web服务。 Web服务是一种通过互联网交换结构化信息的方式,它允许不同系统之间的应用程序进行通信。...

    axis2+hibernate+Spring测试案例

    在hibernate spring项目基础上通过aixs2-1.4.1把程序发布成webService,包括aixs2以对象数组和AXIOM方式处理map,list的程序代码;和aixs2-1.4-1的jar包

    发布webService服务接口与spring整合教程

    本教程将详细讲解如何将Web Service服务接口与Spring框架进行整合,以便在实际开发中实现高效、灵活的服务提供。 首先,让我们了解一下Web Service的基本概念。Web Service是一种软件系统,它通过使用开放标准(如...

    axis+webservice教程

    ### Axis + Webservice 教程 #### 一、环境搭建与配置 在开始学习如何使用Apache Axis构建Web服务之前,我们需要准备以下环境: - **JDK版本**:本教程使用的是JDK 1.4.2,这是当时较为常见的版本之一。 - **IDE*...

    axis1.4.jar和wsdl4j.jar和jaxrpc.jar

    标题中的"axis1.4.jar、wsdl4j.jar和jaxrpc.jar"是与Web服务开发密切相关的Java库,主要用于创建和使用SOAP(Simple Object Access Protocol)服务。这些JAR文件是Axis1版本的一部分,Axis是Apache软件基金会的一个...

    基于axis的webservice示例

    【基于Axis的Web服务示例】讲解了如何使用Apache Axis2框架开发和发布Web服务,以及如何用Java实现客户端调用。Axis2是SOAP 1.1和1.2的支持者,同时也支持RESTful Web服务和Spring、JSON等技术。在本教程中,我们将...

    spring与axis的整合

    由于Axis支持多种扩展功能,可以通过`happyaxis.jsp`页面找到并引入相关的可选包,即使下载的Axis 1.4只有核心包,也能确保项目的完整性和功能性。 #### 三、场景描述与实现 接下来,我们通过一个具体的示例来...

    axis2-1.4.1及教程

    1):用POJO实现0配置的WebService 2):复合类型数据的传递 3):使用services.xml文件发布WebService 4):二进制文件传输 5):会话(Session)管理 6):跨服务会话(Session)管理 7):将Spring的装配JavaBean发布成 8...

Global site tag (gtag.js) - Google Analytics