`

客户端使用AXIS的CALL调用

 
阅读更多

一、客户端使用AXIS的CALL调用

 

package com.common;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

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

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.MessageElement;
import org.apache.axis.types.Schema;
import org.apache.axis2.databinding.utils.BeanUtil;
import com.shun.ebs.model.Senddividendstrategy;

public class Test3 {
	public final static String bipEndpoint = "http://192.168.10.227/ebsService/services/ebsService?wsdl";
	
	public final static String bipNamespace = "http://service.ebs.shun.com";

	public static void main(String[] args) {
		// queryAvailableAmt();
		// cancelDividendStratery();
		senddividendstrategy();
	}
	
	public static void senddividendstrategy() {
		try {
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new URL(bipEndpoint));
			call.setOperationName(new QName(bipNamespace, "senddividendstrategy"));
			call.addParameter("in", XMLType.XSD_STRING, ParameterMode.IN);
			call.setEncodingStyle("UTF-8");
			call.setReturnType(XMLType.XSD_SCHEMA);
			OMElement ome = getOMFactory();
			String beanXml = ome.toStringWithConsume();
			System.out.println("客户端发送:"+beanXml);
			Object o = call.invoke(new Object[] { beanXml });
			Schema schema = (Schema) o;
			MessageElement[] messageElements = schema.get_any();
			StringBuffer str = new StringBuffer("");
			for (MessageElement m : messageElements) {
				str.append(m.toString());
			}
			System.out.println("客户端接受:"+str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void cancelDividendStratery() {
		try {
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new URL(bipEndpoint));
			call.setOperationName(new QName(bipNamespace, "cancelDividendStratery"));
			call.addParameter("p_company_code", XMLType.XSD_STRING, ParameterMode.IN);
			call.addParameter("p_dividend_date", XMLType.XSD_STRING, ParameterMode.IN);
			call.addParameter("p_equity_note_number", XMLType.XSD_STRING, ParameterMode.IN);
			call.setEncodingStyle("UTF-8");
			call.setReturnType(XMLType.XSD_SCHEMA);
			Object o = call.invoke(new Object[] { "801000", "2013-01-04", "" });
			Schema schema = (Schema) o;
			MessageElement[] messageElements = schema.get_any();
			StringBuffer str = new StringBuffer("");
			for (MessageElement m : messageElements) {
				str.append(m.toString());
			}
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void queryAvailableAmt() {
		try {
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new URL(bipEndpoint));
			call.setOperationName(new QName(bipNamespace, "queryAvailableAmt"));
			call.addParameter("p_dividend_date", XMLType.XSD_STRING, ParameterMode.IN);
			call.addParameter("p_company_code", XMLType.XSD_STRING, ParameterMode.IN);
			call.addParameter("p_user_name", XMLType.XSD_STRING, ParameterMode.IN);
			call.addParameter("p_password", XMLType.XSD_STRING, ParameterMode.IN);
			call.setEncodingStyle("UTF-8");
			call.setReturnType(XMLType.XSD_SCHEMA);
			Object o = call.invoke(new Object[] { "2013-01-04", "801000", "", "" });
			Schema schema = (Schema) o;
			MessageElement[] messageElements = schema.get_any();
			StringBuffer str = new StringBuffer("");
			for (MessageElement m : messageElements) {
				str.append(m.toString());
			}
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static OMElement getOMFactory() {
		OMFactory fac = OMAbstractFactory.getOMFactory();
		// OMNamespace指定此SOAP文档名称空间
		OMNamespace om = fac.createOMNamespace("http://service.eee.shun.com", "client");
		// 创建元素,并指定其在om指代的名称空间中,元素名必须跟services.xml重大operation的name相同
		OMElement method = fac.createOMElement("senddividendstrategy", om);
		OMElement root;
		OMElement svsListOmElement;
		List<Senddividendstrategy> svsList = new ArrayList<Senddividendstrategy>();
		try {
			Senddividendstrategy s = null;
			for (int i = 0; i < 10; i++) {
				s = new Senddividendstrategy();
				s.setDividend_date("2013-01-04");
				s.setCompany_code("2");
				s.setEquity_note_number("3");
				s.setDividend_line_number(Long.valueOf(4));
				s.setAssign_type_code("5");
				s.setAssign_source("6");
				s.setSegment3("7");

				s.setAmount(Long.valueOf(8));
				s.setCash_amount(Long.valueOf(9));
				s.setCash_proportion(Long.valueOf(10));
				s.setCash_person_proportion(Long.valueOf(11));
				s.setCapital_source("12");
				s.setCapital_amount(Long.valueOf(13));
				s.setCapital_proportion(Long.valueOf(14));

				s.setCapital_person_proportion(Long.valueOf(15));
				s.setEquity_category("16");
				s.setEquity_properties("17");
				s.setReduce_tax_amount(Long.valueOf(18));
				s.setStart_date("2013-01-04");

				s.setManager_type("20");
				s.setProcess_startus("21");
				s.setData_status("22");

				svsList.add(s);
			}
			root = fac.createOMElement("root", null);
			svsListOmElement = BeanUtil.getOMElement(new QName("sparams"), svsList.toArray(), new QName("sparam"), false, null);
			root.addChild(svsListOmElement);
			method.addChild(root);

			return method;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

二、遇到的问题

 

客户端传送String类型的XML内容的时候服务器段接受会遇到需要处理(目的是要传送XML格式的数据)

public static OMElement checkDataByOMElement(OMElement element) throws AxisFault, Exception {
		String str = element.toStringWithConsume();
		str = str.replace("&lt;", "<")
				.replace("&gt;", ">")
				.replace("<in xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"xsd:string\">", "")
				.replace("</in>", "")
				.replace("<client:senddividendstrategy xmlns:client=\"http://service.ebs.shun.com\">", "")
				.replace("</client:senddividendstrategy>", "");
		element = new StAXOMBuilder(new ByteArrayInputStream(str.getBytes("UTF-8"))).getDocumentElement();
		System.out.println("服务端接受:"+element.toString());
		System.out.println("服务端接受str:"+str);
.....

 

三、xml、OMElement、java对象之间转换

  1. import java.io.ByteArrayInputStream;  
  2.   
  3. import org.apache.axiom.om.OMElement;  
  4. import org.apache.axiom.om.impl.builder.StAXOMBuilder;  
  5. import org.apache.axis2.databinding.utils.BeanUtil;  
  6. import org.apache.axis2.engine.DefaultObjectSupplier;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.DocumentHelper;  
  9.   
  10. public class XMLUtil  
  11. {  
  12.       
  13.     @SuppressWarnings("unchecked")  
  14.     public static  T xmlToBean(String xml, Class cls)  
  15.     {  
  16.         T object = null;  
  17.         try  
  18.         {  
  19.             OMElement omElement = new StAXOMBuilder(new ByteArrayInputStream(  
  20.                     xml.getBytes("UTF-8"))).getDocumentElement();  
  21.             object = (T) BeanUtil.processObject(omElement, cls, nulltrue,  
  22.                     new DefaultObjectSupplier());  
  23.         }  
  24.         catch (Exception e)  
  25.         {  
  26.             e.printStackTrace();  
  27.         }  
  28.         return object;  
  29.     }  
  30.       
  31.       
  32.     @SuppressWarnings("unchecked")  
  33.     public static  T xmlToBean(String xml, String elementName, Class cls)  
  34.     {  
  35.         T object = null;  
  36.         try  
  37.         {  
  38.             Document document = DocumentHelper.parseText(xml);  
  39.             String beanXml = document.getRootElement().element("Body").element(  
  40.                     elementName).asXML();  
  41.             OMElement omElement = new StAXOMBuilder(new ByteArrayInputStream(  
  42.                     beanXml.getBytes("UTF-8"))).getDocumentElement();  
  43.               
  44.             object = (T) BeanUtil.processObject(omElement, cls, nulltrue,  
  45.                     new DefaultObjectSupplier());  
  46.         }  
  47.         catch (Exception e)  
  48.         {  
  49.             e.printStackTrace();  
  50.         }  
  51.         return object;  
  52.     }  
  53. }  
分享到:
评论

相关推荐

    Axis动态调用webService

    在使用 Axis 调用 Web 服务之前,需要将以下 JAR 包添加到项目的类路径中: 1. xmlsec-1.3.0.jar 2. axis.jar 3. axis-ant.jar 4. axis-schema-1.3.jar 5. axis-wsdl4j-1.5.1.jar 6. commons-discovery-0.2.jar 7. ...

    Java WebService 简单实例 方式二(axis1直接调用方式)

    本篇文章将详细介绍如何使用Apache Axis 1(以下简称Axis1)来创建和调用一个简单的Java Web Service示例。通过这种方式,我们不仅能够学习到Java Web Service的基本概念和工作原理,还能掌握具体的实现步骤和技术...

    详解axis调用webservice实例

    标题中的“详解axis调用webservice实例”表明我们将探讨如何使用Apache Axis库来调用Web服务。Apache Axis是一个开源工具,它允许Java开发者创建、部署和使用Web服务。在这个实例中,我们会有机会看到实际的Java代码...

    Java WebService 简单实例 方式三(axis1接口调用方式)

    本实例将介绍如何使用Apache Axis1库来创建和调用Web服务,这是一种常见的Java WebService实现方式。 一、WebService基本概念 1. WebService是一种基于XML(可扩展标记语言)的协议,它允许应用程序通过HTTP协议...

    java axis调用第三方webservice程序demo

    本文将详细介绍如何使用Java Axis调用第三方Webservice,并提供一个简单的示例。 一、Java Axis调用第三方Webservice的准备工作 1. **所需Jar包**: 在Java中使用Axis调用Webservice,首先需要引入必要的库文件。...

    Axis客户端的几种实现方式

    标题中的“Axis客户端的几种实现方式”指的是在Java开发中,使用Axis库来...而`testWSDL2Java`这个文件很可能是使用Axis工具生成的测试代码,我们可以从中学习到如何根据WSDL生成Java客户端,并进行实际的服务调用。

    SOAP的Client调用Axis服务

    在本场景中,我们将讨论如何使用SOAP客户端调用Axis服务。 首先,理解SOAP客户端的基本工作原理是至关重要的。SOAP客户端通常需要构造一个符合SOAP规范的XML消息,这个消息包含了请求的服务方法、参数等信息。然后...

    webservice-client-call axis

    在本场景中,"webservice-client-call axis" 指的是使用Axis库来调用Web服务客户端。Axis是Apache软件基金会开发的一个开源项目,主要用于创建和部署Web服务以及作为客户端来调用Web服务。 1. **Axis简介**:Axis是...

    axis 代码jar包

    3. 调用Web服务: Axis提供了一个客户端API,使得Java应用能够方便地调用其他SOAP Web服务。 4. 配置:配置Axis的配置文件axis.properties和services.xml以定制服务行为。 五、注意事项 - Axis-1.4版本可能存在安全...

    org.apache.axis jar

    5. **客户端调用**:对于Web服务的消费者,Axis提供了解析WSDL并生成客户端代理类的功能。这些代理类使开发者能够像调用本地方法一样调用远程Web服务。 6. **类型映射**:Axis支持自动的Java类型到SOAP数据类型的...

    利用eclipse,axis2框架,搭建WebService服务端,以及如何调用接口的教程

    ### 使用Eclipse与Axis2框架搭建WebService服务端及调用接口教程 #### 一、概述 本文档将详细介绍如何利用Eclipse集成开发环境与Axis2框架来构建WebService服务端,并进一步探讨如何通过Java应用程序调用这些服务...

    实现webServices接口调用demo

    - 外部访问:当Web服务对外提供,允许远程客户端通过HTTP访问时,就需要使用上面介绍的代理方式,通过URL调用服务。 七、XFire与其他框架对比 虽然现在CXF已经取代了XFire,但XFire在轻量级和易用性方面仍有其优势...

    axis配置(axis详细配置)

    ### Axis配置详解 ...通过本文的介绍,我们不仅了解了如何在Eclipse环境下配置和部署Axis环境,还学习了如何创建和调用一个简单的Web服务。这对于进一步学习和使用Axis开发复杂的Web应用打下了坚实的基础。

    [原创]使用Axis1.4开发WebService

    在客户端代码中,使用Axis提供的`Call`和`Service`类,根据服务的URL和方法名,调用远程的WebService。例如,调用`deposit`方法: ```java QName serviceName = new QName("http://hcycom.com", "account"); ...

    编程语言javawebservice实例.pdf

    客户端通过Axis框架的Service类和Call类来创建一个Web服务的调用实例。首先实例化一个Service对象,然后用Service对象创建Call对象。Call对象需要设置操作名称(即方法名)和目标端点地址(即服务端地址)。之后通过...

    Axis2发布以及调用webservice具体实例

    本文将详细介绍如何使用 Apache Axis2 在 Tomcat 6.0 上发布 WebService 服务端,并实现客户端的调用。通过本教程,您将学会一种简单易行的方法来部署和调用 WebService。 #### 二、环境搭建 ##### 1. 下载并配置 ...

Global site tag (gtag.js) - Google Analytics