客户端使用AXIS的CALL调用

来源:互联网 发布:java tar.gz 安装 编辑:程序博客网 时间:2024/05/16 12:46

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

 

Java代码  收藏代码
  1. package com.common;  
  2.   
  3. import java.net.URL;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import javax.xml.namespace.QName;  
  8. import javax.xml.rpc.ParameterMode;  
  9.   
  10. import org.apache.axiom.om.OMAbstractFactory;  
  11. import org.apache.axiom.om.OMElement;  
  12. import org.apache.axiom.om.OMFactory;  
  13. import org.apache.axiom.om.OMNamespace;  
  14. import org.apache.axis.client.Call;  
  15. import org.apache.axis.client.Service;  
  16. import org.apache.axis.encoding.XMLType;  
  17. import org.apache.axis.message.MessageElement;  
  18. import org.apache.axis.types.Schema;  
  19. import org.apache.axis2.databinding.utils.BeanUtil;  
  20. import com.shun.ebs.model.Senddividendstrategy;  
  21.   
  22. public class Test3 {  
  23.     public final static String bipEndpoint = "http://192.168.10.227/ebsService/services/ebsService?wsdl";  
  24.       
  25.     public final static String bipNamespace = "http://service.ebs.shun.com";  
  26.   
  27.     public static void main(String[] args) {  
  28.         // queryAvailableAmt();  
  29.         // cancelDividendStratery();  
  30.         senddividendstrategy();  
  31.     }  
  32.       
  33.     public static void senddividendstrategy() {  
  34.         try {  
  35.             Service service = new Service();  
  36.             Call call = (Call) service.createCall();  
  37.             call.setTargetEndpointAddress(new URL(bipEndpoint));  
  38.             call.setOperationName(new QName(bipNamespace, "senddividendstrategy"));  
  39.             call.addParameter("in", XMLType.XSD_STRING, ParameterMode.IN);  
  40.             call.setEncodingStyle("UTF-8");  
  41.             call.setReturnType(XMLType.XSD_SCHEMA);  
  42.             OMElement ome = getOMFactory();  
  43.             String beanXml = ome.toStringWithConsume();  
  44.             System.out.println("客户端发送:"+beanXml);  
  45.             Object o = call.invoke(new Object[] { beanXml });  
  46.             Schema schema = (Schema) o;  
  47.             MessageElement[] messageElements = schema.get_any();  
  48.             StringBuffer str = new StringBuffer("");  
  49.             for (MessageElement m : messageElements) {  
  50.                 str.append(m.toString());  
  51.             }  
  52.             System.out.println("客户端接受:"+str);  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.     }  
  57.   
  58.     public static void cancelDividendStratery() {  
  59.         try {  
  60.             Service service = new Service();  
  61.             Call call = (Call) service.createCall();  
  62.             call.setTargetEndpointAddress(new URL(bipEndpoint));  
  63.             call.setOperationName(new QName(bipNamespace, "cancelDividendStratery"));  
  64.             call.addParameter("p_company_code", XMLType.XSD_STRING, ParameterMode.IN);  
  65.             call.addParameter("p_dividend_date", XMLType.XSD_STRING, ParameterMode.IN);  
  66.             call.addParameter("p_equity_note_number", XMLType.XSD_STRING, ParameterMode.IN);  
  67.             call.setEncodingStyle("UTF-8");  
  68.             call.setReturnType(XMLType.XSD_SCHEMA);  
  69.             Object o = call.invoke(new Object[] { "801000""2013-01-04""" });  
  70.             Schema schema = (Schema) o;  
  71.             MessageElement[] messageElements = schema.get_any();  
  72.             StringBuffer str = new StringBuffer("");  
  73.             for (MessageElement m : messageElements) {  
  74.                 str.append(m.toString());  
  75.             }  
  76.             System.out.println(str);  
  77.         } catch (Exception e) {  
  78.             e.printStackTrace();  
  79.         }  
  80.     }  
  81.   
  82.     public static void queryAvailableAmt() {  
  83.         try {  
  84.             Service service = new Service();  
  85.             Call call = (Call) service.createCall();  
  86.             call.setTargetEndpointAddress(new URL(bipEndpoint));  
  87.             call.setOperationName(new QName(bipNamespace, "queryAvailableAmt"));  
  88.             call.addParameter("p_dividend_date", XMLType.XSD_STRING, ParameterMode.IN);  
  89.             call.addParameter("p_company_code", XMLType.XSD_STRING, ParameterMode.IN);  
  90.             call.addParameter("p_user_name", XMLType.XSD_STRING, ParameterMode.IN);  
  91.             call.addParameter("p_password", XMLType.XSD_STRING, ParameterMode.IN);  
  92.             call.setEncodingStyle("UTF-8");  
  93.             call.setReturnType(XMLType.XSD_SCHEMA);  
  94.             Object o = call.invoke(new Object[] { "2013-01-04""801000""""" });  
  95.             Schema schema = (Schema) o;  
  96.             MessageElement[] messageElements = schema.get_any();  
  97.             StringBuffer str = new StringBuffer("");  
  98.             for (MessageElement m : messageElements) {  
  99.                 str.append(m.toString());  
  100.             }  
  101.             System.out.println(str);  
  102.         } catch (Exception e) {  
  103.             e.printStackTrace();  
  104.         }  
  105.     }  
  106.   
  107.     public static OMElement getOMFactory() {  
  108.         OMFactory fac = OMAbstractFactory.getOMFactory();  
  109.         // OMNamespace指定此SOAP文档名称空间  
  110.         OMNamespace om = fac.createOMNamespace("http://service.eee.shun.com""client");  
  111.         // 创建元素,并指定其在om指代的名称空间中,元素名必须跟services.xml重大operation的name相同  
  112.         OMElement method = fac.createOMElement("senddividendstrategy", om);  
  113.         OMElement root;  
  114.         OMElement svsListOmElement;  
  115.         List<Senddividendstrategy> svsList = new ArrayList<Senddividendstrategy>();  
  116.         try {  
  117.             Senddividendstrategy s = null;  
  118.             for (int i = 0; i < 10; i++) {  
  119.                 s = new Senddividendstrategy();  
  120.                 s.setDividend_date("2013-01-04");  
  121.                 s.setCompany_code("2");  
  122.                 s.setEquity_note_number("3");  
  123.                 s.setDividend_line_number(Long.valueOf(4));  
  124.                 s.setAssign_type_code("5");  
  125.                 s.setAssign_source("6");  
  126.                 s.setSegment3("7");  
  127.   
  128.                 s.setAmount(Long.valueOf(8));  
  129.                 s.setCash_amount(Long.valueOf(9));  
  130.                 s.setCash_proportion(Long.valueOf(10));  
  131.                 s.setCash_person_proportion(Long.valueOf(11));  
  132.                 s.setCapital_source("12");  
  133.                 s.setCapital_amount(Long.valueOf(13));  
  134.                 s.setCapital_proportion(Long.valueOf(14));  
  135.   
  136.                 s.setCapital_person_proportion(Long.valueOf(15));  
  137.                 s.setEquity_category("16");  
  138.                 s.setEquity_properties("17");  
  139.                 s.setReduce_tax_amount(Long.valueOf(18));  
  140.                 s.setStart_date("2013-01-04");  
  141.   
  142.                 s.setManager_type("20");  
  143.                 s.setProcess_startus("21");  
  144.                 s.setData_status("22");  
  145.   
  146.                 svsList.add(s);  
  147.             }  
  148.             root = fac.createOMElement("root"null);  
  149.             svsListOmElement = BeanUtil.getOMElement(new QName("sparams"), svsList.toArray(), new QName("sparam"), falsenull);  
  150.             root.addChild(svsListOmElement);  
  151.             method.addChild(root);  
  152.   
  153.             return method;  
  154.         } catch (Exception e) {  
  155.             e.printStackTrace();  
  156.         }  
  157.         return null;  
  158.     }  
  159. }  

二、遇到问题

 

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

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

 

二、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. }   
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>