`
conkeyn
  • 浏览: 1512005 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

在axis1.4中传递复杂类型数组参数(ArrayMapping)

阅读更多

Axis1.4环境配置:

 

配置一些工具在命令行中的运行环境:

AXIS_CLASSPATH 的值就是下面贴出来的内容:

%AXIS_HOME%/lib/axis.jar;
%AXIS_HOME%/lib/axis-ant.jar;
%AXIS_HOME%/lib/commons-discovery-0.2.jar;
%AXIS_HOME%/lib/commons-logging-1.0.4.jar;
%AXIS_HOME%/lib/jaxrpc.jar;
%AXIS_HOME%/lib/log4j-1.2.8.jar;
%AXIS_HOME%/lib/wsdl4j-1.5.1.jar;
%AXIS_HOME%/lib/activation-1.1.jar;
%AXIS_HOME%/lib/mail-1.4.jar;
%AXIS_HOME%/lib/resolver.jar;
%AXIS_HOME%/lib/saaj.jar;
%AXIS_HOME%/lib/serializer.jar;
%AXIS_HOME%/lib/xercesImpl.jar;
%AXIS_HOME%/lib/xml-apis.jar;

 

 

Bean类的代码:

package samples.userguide.example5;

/**
 * This is a JavaBean which represents an order for some products.
 * 
 * @author Glen Daniels (gdaniels@apache.org)
 */
public class Order {
	/** Who's ordering */
	private String customerName;
	/** Where do they live */
	private String shippingAddress;
	/** Which items do we want */
	private String itemCodes[];
	/** And how many */
	private int quantities[];

	// Bean accessors

	public String getCustomerName() {
		return customerName;
	}

	public void setCustomerName(String name) {
		customerName = name;
	}

	public String getShippingAddress() {
		return shippingAddress;
	}

	public void setShippingAddress(String address) {
		shippingAddress = address;
	}

	public String[] getItemCodes() {
		return itemCodes;
	}

	public void setItemCodes(String[] items) {
		itemCodes = items;
	}

	public int[] getQuantities() {
		return quantities;
	}

	public void setQuantities(int[] quants) {
		quantities = quants;
	}
}

 服务端代码:

package samples.userguide.example5;

public class ArrayService {

	public String processOrders(Order[] orders) {
		String s = "";
		if (orders != null && orders.length > 0) {
			s += "订单数组中共有" + orders.length + "元素\n";
			for (Order order : orders) {
				s += "名称:" + order.getCustomerName() + ",地址:"
						+ order.getShippingAddress() + "\n";
			}
		}
		return s;
	}
}

 布署的配置文件deploy.wsdd ,这个文件是存放在 %WEB_APP%/WEB-INF/deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="OrdersProcessor" provider="java:RPC">
    	<parameter name="className" value="samples.userguide.example5.ArrayService"/>
    	<parameter name="allowedMethods" value="*"/>
    	<beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" 
    				languageSpecificType="java:samples.userguide.example5.Order"/>
    	<arrayMapping qname="myNS:OrderArray" xmlns:myNS="urn:ArrayService" 
					languageSpecificType="java:samples.userguide.example5.Order[]"
					innerType="myNS:Order"
             		encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    </service>
</deployment>

 其实配置文件这里只需要针对复杂类型(Order类)进行手动配置即可,而不需要对数组再次定义。


生成server-config.wsdd,假设我们的WEB项目目录为D:\workspace-java\axis1\web

那么我们生成server-config.wsdd的命令为:

D:\workspace-java\axis1\web\WEB-INF>java -classpath %CLASSPATH% org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/OrdersProcessor deploy.wsdd

 

启动TCPMON(监控程序)

启动监控控制台,命令如下:

D:\>java -classpath %CLASSPATH% org.apache.axis.utils.tcpmon 9999 localhost 8080

接下来,如果我们在客户端访问web service时使用9999端口时,它将通过tcpmon代理并转发到tomcat的8080端口上。使用tcpmon工具有一个好处是可以看到所有web service交互的信封(envelope)。

 

客户端程序代码:

package samples.userguide.example5;

import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class ArrayClient {

	public static void main(String[] args) throws ServiceException,
			RemoteException {
		String url = "http://localhost:9999/axis/services/OrdersProcessor";
		Order[] orders = new Order[5];
		for (int i = 0; i < 5; i++) {
			Order order = new Order();
			order.setCustomerName("customer name " + i);
			order.setShippingAddress("shipping address " + i);
			orders[i] = order;
		}
		Service service = new Service();
		Call call = (Call) service.createCall();
		QName qn1 = new QName("urn:ArrayService", "OrderArray");
		QName qn2 = new QName("urn:BeanService", "Order");
		call.registerTypeMapping(Order.class, qn2,
				new org.apache.axis.encoding.ser.BeanSerializerFactory(
						Order.class, qn2),
				new org.apache.axis.encoding.ser.BeanDeserializerFactory(
						Order.class, qn2));
		call.setTargetEndpointAddress(url);
		Object[] arg1 = new Object[] { orders };
		call.setOperationName(new QName("OrdersProcessor", "processOrders"));
		call.addParameter("arg0", XMLType.SOAP_ARRAY




, ParameterMode.IN);
		call.setReturnType(XMLType.XSD_STRING);
		String result = (String) call.invoke(arg1);
		System.out.println(result);
	}
}

 需要注意的是客户端要传入一个数组,因此需要使用数组的SOAP定义( XMLType.SOAP_ARRAY )。

 

 

 

 

  • 大小: 91 KB
  • 大小: 46 KB
  • 大小: 14.3 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

    axis1.4完整包下载

    标题“axis1.4完整包下载”表明我们关注的是Apache Axis的1.4版本,这是一个较早但仍然在某些环境中使用的版本。 在描述中提到,“包含Axis1.4的所有完整包”,这意味着下载包中包含了运行和开发SOAP Web服务所需的...

    axis1.4生成客户端

    - WSDL2Java和Java2WSDL工具:这两个工具是Axis1.4的核心部分,它们帮助开发者在WSDL和Java代码之间转换。 - JAX-WS(Java API for XML Web Services):这是Java平台标准,用于创建和处理Web服务,它是Axis2的...

    springboot+axis1.4

    2. **集成 Axis1.4**:首先,你需要在Spring Boot的`pom.xml`文件中添加Axis1.4的依赖。这通常意味着你需要手动添加Axis的库,因为Spring Boot默认并不包含对Axis的支持。你需要找到Axis1.4的Maven坐标,并在`...

    axis1.4帮助文档

    在Axis1.4中,可以通过WSDL文件来生成服务实现或客户端代理类。 4. **服务发布**:使用Axis1.4,开发者可以轻松地将Java类发布为Web服务。只需简单的配置和几步操作,就能将业务逻辑暴露为可供其他系统调用的服务。...

    axis1.4jar包以及WSDL和服务端代码互转方法

    虽然可以直接通过命令行使用Axis1.4工具,但在Eclipse中安装Axis1.4插件可以使过程更加便捷。通过Eclipse的“帮助” -&gt; “安装新软件”,添加Axis1.4的更新站点,然后按照提示安装。安装完成后,你可以在Eclipse中...

    WebService axis1.4接口服务序列/反序列复杂项目实例

    在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...

    Springboot集成axis1.4的demo

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

    apache axis1.4实例

    在实际开发中,Apache Axis1.4常用于企业级应用集成,例如B2B系统之间的数据交换,或者为现有Java应用程序提供Web服务接口。它也可以与EJB、Spring等框架集成,构建复杂的分布式系统。 总结,Apache Axis1.4虽已...

    webservice axis1.4服务实例

    1. **安装Axis1.4**:下载并解压Axis1.4的发行版,将其添加到系统路径中。 2. **创建Java服务类**:编写提供Web服务功能的Java类,通常包含一些公共方法。 3. **生成WSDL**:使用Axis1.4提供的`wsdl2java`工具,从...

    axis1.4 + document/literal 实例

    在这个“axis1.4 + document/literal 实例”中,我们将深入探讨Axis 1.4框架下的document/literal绑定模式。 首先,让我们理解什么是Axis 1.4。Axis 1.4是Axis的一个早期版本,它提供了一套工具和服务,使得开发者...

    AXIS1.4客户端调用

    Apache Axis1.4是一个开源工具,它允许开发者在Java环境中轻松地构建和部署Web服务。这个工具集为XML-RPC和SOAP提供了客户端和服务端的实现,极大地简化了分布式应用程序的开发。 1. **SOAP协议**:SOAP是一种基于...

    apache axis1.4 官网备份

    总结,Apache Axis1.4虽然已经不再得到官方支持,但它见证了Web服务发展的早期阶段,其设计理念和实现方式在现代Web服务框架中仍然有所体现。了解并研究Axis1.4的历史,有助于我们更好地理解和使用现在的Web服务技术...

    axis1.4和axis2相关jar文件

    了解并熟练使用Axis1.4和Axis2的相关jar文件,对于开发和维护Web服务至关重要。这不仅可以帮助开发者快速构建服务,还能确保与现有系统和其他Web服务的互操作性。在实际项目中,应根据具体需求选择适合的版本,同时...

    axis1.4及webService开发教程

    在实际应用中, Axis1.4还可以与其他Java EE组件如EJB、JMS等结合,实现更复杂的业务逻辑。同时,由于Axis1.4支持WS-I(Web Services Interoperability)规范,因此可以保证跨平台、跨语言的互操作性。 总的来说,...

    webservice axis1.4 开发资料

    在本文中,我们将详细探讨Axis1.4在Web服务开发中的关键知识点。 1. **Axis1.4框架**:Axis1.4是Axis1.x系列的一个版本,提供了一整套工具和库,用于创建、部署和管理Web服务。它支持SOAP 1.1协议,并通过WSDL(Web...

    Axis 1.4所有包

    在Axis 1.4中,Xerces用于解析XML文档,是处理SOAP消息不可或缺的部分。XercesImpl-2.8.1.jar是这个解析器的具体版本。 "lib"目录通常包含更多的依赖库文件。在Axis 1.4中,lib目录下的JAR文件可能包括但不限于以下...

    axis1.4依赖包

    在Axis1.4中,`mail.jar`和`activation-1.1.jar`是两个关键的依赖库,它们在Web服务通信中扮演着重要角色。 1. **mail.jar**: 这个JAR文件包含了JavaMail API,是一个用于处理电子邮件的开放源代码API。在Web服务中...

    web service axis1.4 jar

    在Axis1.4中,开发者可以利用WSDL来描述他们的服务,使得其他系统能够自动发现并调用这些服务。 2. **Java to SOAP绑定**: Axis1.4提供了一种机制,将Java类直接转换为SOAP消息,反之亦然。这使得Java对象可以...

Global site tag (gtag.js) - Google Analytics