一、客户端使用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("<", "<") .replace(">", ">") .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对象之间转换
- import java.io.ByteArrayInputStream;
- import org.apache.axiom.om.OMElement;
- import org.apache.axiom.om.impl.builder.StAXOMBuilder;
- import org.apache.axis2.databinding.utils.BeanUtil;
- import org.apache.axis2.engine.DefaultObjectSupplier;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- public class XMLUtil
- {
- @SuppressWarnings("unchecked")
- public static T xmlToBean(String xml, Class cls)
- {
- T object = null;
- try
- {
- OMElement omElement = new StAXOMBuilder(new ByteArrayInputStream(
- xml.getBytes("UTF-8"))).getDocumentElement();
- object = (T) BeanUtil.processObject(omElement, cls, null, true,
- new DefaultObjectSupplier());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- return object;
- }
- @SuppressWarnings("unchecked")
- public static T xmlToBean(String xml, String elementName, Class cls)
- {
- T object = null;
- try
- {
- Document document = DocumentHelper.parseText(xml);
- String beanXml = document.getRootElement().element("Body").element(
- elementName).asXML();
- OMElement omElement = new StAXOMBuilder(new ByteArrayInputStream(
- beanXml.getBytes("UTF-8"))).getDocumentElement();
- object = (T) BeanUtil.processObject(omElement, cls, null, true,
- new DefaultObjectSupplier());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- return object;
- }
- }
相关推荐
在使用 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. ...
本篇文章将详细介绍如何使用Apache Axis 1(以下简称Axis1)来创建和调用一个简单的Java Web Service示例。通过这种方式,我们不仅能够学习到Java Web Service的基本概念和工作原理,还能掌握具体的实现步骤和技术...
标题中的“详解axis调用webservice实例”表明我们将探讨如何使用Apache Axis库来调用Web服务。Apache Axis是一个开源工具,它允许Java开发者创建、部署和使用Web服务。在这个实例中,我们会有机会看到实际的Java代码...
本实例将介绍如何使用Apache Axis1库来创建和调用Web服务,这是一种常见的Java WebService实现方式。 一、WebService基本概念 1. WebService是一种基于XML(可扩展标记语言)的协议,它允许应用程序通过HTTP协议...
本文将详细介绍如何使用Java Axis调用第三方Webservice,并提供一个简单的示例。 一、Java Axis调用第三方Webservice的准备工作 1. **所需Jar包**: 在Java中使用Axis调用Webservice,首先需要引入必要的库文件。...
标题中的“Axis客户端的几种实现方式”指的是在Java开发中,使用Axis库来...而`testWSDL2Java`这个文件很可能是使用Axis工具生成的测试代码,我们可以从中学习到如何根据WSDL生成Java客户端,并进行实际的服务调用。
在本场景中,我们将讨论如何使用SOAP客户端调用Axis服务。 首先,理解SOAP客户端的基本工作原理是至关重要的。SOAP客户端通常需要构造一个符合SOAP规范的XML消息,这个消息包含了请求的服务方法、参数等信息。然后...
在本场景中,"webservice-client-call axis" 指的是使用Axis库来调用Web服务客户端。Axis是Apache软件基金会开发的一个开源项目,主要用于创建和部署Web服务以及作为客户端来调用Web服务。 1. **Axis简介**:Axis是...
3. 调用Web服务: Axis提供了一个客户端API,使得Java应用能够方便地调用其他SOAP Web服务。 4. 配置:配置Axis的配置文件axis.properties和services.xml以定制服务行为。 五、注意事项 - Axis-1.4版本可能存在安全...
5. **客户端调用**:对于Web服务的消费者,Axis提供了解析WSDL并生成客户端代理类的功能。这些代理类使开发者能够像调用本地方法一样调用远程Web服务。 6. **类型映射**:Axis支持自动的Java类型到SOAP数据类型的...
### 使用Eclipse与Axis2框架搭建WebService服务端及调用接口教程 #### 一、概述 本文档将详细介绍如何利用Eclipse集成开发环境与Axis2框架来构建WebService服务端,并进一步探讨如何通过Java应用程序调用这些服务...
- 外部访问:当Web服务对外提供,允许远程客户端通过HTTP访问时,就需要使用上面介绍的代理方式,通过URL调用服务。 七、XFire与其他框架对比 虽然现在CXF已经取代了XFire,但XFire在轻量级和易用性方面仍有其优势...
### Axis配置详解 ...通过本文的介绍,我们不仅了解了如何在Eclipse环境下配置和部署Axis环境,还学习了如何创建和调用一个简单的Web服务。这对于进一步学习和使用Axis开发复杂的Web应用打下了坚实的基础。
在客户端代码中,使用Axis提供的`Call`和`Service`类,根据服务的URL和方法名,调用远程的WebService。例如,调用`deposit`方法: ```java QName serviceName = new QName("http://hcycom.com", "account"); ...
客户端通过Axis框架的Service类和Call类来创建一个Web服务的调用实例。首先实例化一个Service对象,然后用Service对象创建Call对象。Call对象需要设置操作名称(即方法名)和目标端点地址(即服务端地址)。之后通过...
本文将详细介绍如何使用 Apache Axis2 在 Tomcat 6.0 上发布 WebService 服务端,并实现客户端的调用。通过本教程,您将学会一种简单易行的方法来部署和调用 WebService。 #### 二、环境搭建 ##### 1. 下载并配置 ...