一、客户端使用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;
- }
- }
相关推荐
cxf客户端调用axis服务端流程
本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。
axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...
cxf客户端调用axis服务端流程.docxcxf客户端调用axis服务端流程.docx
Axis客户端调用代码,使用WSDL2JAVA生成的客户端,可以直接进行调用
java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG
AXIS2客户端调用实例 AXIS2客户端调用实例 AXIS2客户端调用实例 AXIS2客户端调用实例
使用Java+Axis2调用Web Services 网络接口,代码中列举4个例子可以查看,有详细注释提供参考。
axis2客户端调用工程代码
axis2客户端调用服务端,带用户身份认证
本案例实现使用Axis2生成.arr包发布WebService服务,并使用Axis2生成客户端代码方式调用WebService
axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端
axis1.4生成访问客户端代码
axis2客户端调用webService接口需要用的jar包,在一次调接口中遇到的问题,亲测可用(整理成了比较精简的jar包)
之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用
cxf_axis_xfire客户端调用的几种方法[收集].pdf
Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;
axis2客户端,调用带ntlm认证的web service的代码例子和所需jar和java
WebService Axis客户端调用接口需要用到的jar包
NULL 博文链接:https://goldlive.iteye.com/blog/623828