webservice

    xiaoxiao2021-12-14  15

    调用某公司的.net服务总是失败报错,最好只能用axis2生成客户端代码,然后加上红色的代码就可以了。

    ReceiveStorageStub stub = new ReceiveStorageStub(); stub._getServiceClient().engageModule(org.apache.axis2.Constants.MODULE_ADDRESSING); ReceiveRealEstateStorageQueue queue = ReceiveRealEstateStorageQueue.class.newInstance(); queue.setStrBizMsgID(strBizMsgID); queue.setStrRealEstateXML(sendXml); queue.setStrRecType(strRecType); queue.setStrReportMethod(srm); returnValue = stub.receiveRealEstateStorageQueue(queue).getReceiveRealEstateStorageQueueResult();

    工具类:

    import java.net.URL;

    import java.text.MessageFormat; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.xml.namespace.QName; 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.axiom.om.OMNode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.description.OperationDesc; import org.apache.axis.description.ParameterDesc; import org.apache.axis.encoding.XMLType; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.rpc.client.RPCServiceClient; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.transport.http.HttpTransportProperties; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; /**  *   * @author zy  *  */ public class WebServiceUtil { /**      * seee#org.apache.axis.client.Call      */     private static Call call = null;          /** Axis2 RPCServiceClient */     private static RPCServiceClient serviceClient;          /**      * 格式 消息的信息.      * @see java.text.MessageFormat#format(String, Object...)      *       * @param pattern 需要格式的字符串      * @param arguments 格式式参数      * @return 成功返回格式化后的内容, 否则不进行格式化操作      */     public static String messageFormat(String pattern, Object ... arguments) {         try {             return MessageFormat.format(pattern, arguments);         } catch (Exception e) {             return pattern;         }     }      /**      * 使用Axis Call Client动态调用WebService地址.      *       * @param webServiceAddr WebService地址      * @param webServiceMethod WebService方法      * @param soapActionURI SOAPActionURI      * @param targetNamespace 命名空间      * @param inputValues 输入参数值      * @param inputNames 输入参数名称      * @param inputXmlTypes 输入参数XML类型      * @param inputJavaTypes 输入参数JAVA类型      * @return 成功返回<code>Object</code>, 失败或异常返回null.      */     public static Object getObjectByAxisCallClient(String webServiceAddr, String webServiceMethod, String soapActionURI,             String targetNamespace, Object[] inputValues, String[] inputNames, String[] inputXmlTypes, Class<?>[] inputJavaTypes) {         return getObjectByAxisCallClient(webServiceAddr, webServiceMethod, soapActionURI, targetNamespace, inputValues, inputNames,                  inputXmlTypes, inputJavaTypes, null, null);     }           /**      * 使用Axis Call Client动态调用WebService地址.      *       * @param webServiceAddr WebService地址      * @param webServiceMethod WebService方法      * @param soapActionURI SOAPActionURI      * @param targetNamespace 命名空间      * @param inputValues 输入参数值      * @param inputNames 输入参数名称      * @param inputXmlTypes 输入参数XML类型      * @param inputJavaTypes 输入参数JAVA类型      * @param username 用户名(HTTP Basic Authentication)       * @param password 密码(HTTP Basic Authentication)      * @return 成功返回<code>Object</code>, 失败或异常返回null.      */     public static Object getObjectByAxisCallClient(String webServiceAddr, String webServiceMethod, String soapActionURI,             String targetNamespace, Object[] inputValues, String[] inputNames, String[] inputXmlTypes, Class<?>[] inputJavaTypes,              String username, String password) {         Object resObj = null;         try {             if (call == null) {                 Service service = new Service();                 call = (Call) service.createCall();             }             // 设置wsdl             call.setTargetEndpointAddress(new URL(webServiceAddr));             // 定义参数对象             call.setUseSOAPAction(true);             call.setSOAPActionURI(soapActionURI + webServiceMethod);             // 设置访问的方法名             call.setOperationName(webServiceMethod);             OperationDesc oper = new OperationDesc();             if (!ArrayUtils.isEmpty(inputNames)) {                 for (int i = 0; i < inputNames.length; i++) {                     // String类型                     oper.addParameter(new QName(targetNamespace, inputNames[i]), new QName(targetNamespace, inputXmlTypes[i]),                             inputJavaTypes[i], ParameterDesc.IN, false, false);                 }             }             oper.setReturnType(XMLType.XSD_ANYTYPE);             call.setOperation(oper);             call.setTimeout(30000);               // 访问权限验证.             if (StringUtils.isNotEmpty(username) && StringUtils.isNotEmpty(password)) {                 call.setUsername(username);                 call.setPassword(password);             }             resObj = call.invoke(inputValues);         } catch (Exception e) {             // TODO Auto/generated catch block             String message = messageFormat("使用AxisCallClient调用WebService地址{{0}}方法{{1}}出现错误!", webServiceAddr, webServiceMethod);             //throw new InterfaceException(message);         }         return resObj;     }       /**      * 通过Axis2 取得Web Services 结果.      * 可以使用身份验证(HTTP Basic Auchntication)      *       * @param webServiceAddr Web Service的URL地址(需要加?wsdl)      * @param webServiceMethod WebService所操作的方法名称      * @param targetNamespace  WebServiceNamespace      * @param inputValues 对所操作方法所需要输入的参数值,如果些操作方法无参则 使用 new Object[] {},不允许输入 null      * @param returnJavaTypes 指定所返回结果数据的Java Class类型数组, 如果无参数则使用 new Object[] {},不允许输入 null      * @return 成功返回<code>Object[]</code>, 失败或异常返回null.      */     public static Object[] geObjectByAxis2RPCClient(String webServiceAddr, String webServiceMethod, String targetNamespace,             Object[] inputValues, Class<?>[] returnJavaTypes) {         return geObjectByAxis2RPCClient(webServiceAddr, webServiceMethod, targetNamespace, inputValues, returnJavaTypes, null, null);     }     /**      * 通过Axis2 取得Web Services 结果.      * 可以使用身份验证(HTTP Basic Auchntication)      *       * @param webServiceAddr Web Service的URL地址(需要加?wsdl)      * @param webServiceMethod WebService所操作的方法名称      * @param targetNamespace  WebServiceNamespace      * @param inputValues 对所操作方法所需要输入的参数值,如果些操作方法无参则 使用 new Object[] {},不允许输入 null      * @param returnJavaTypes 指定所返回结果数据的Java Class类型数组, 如果无参数则使用 new Object[] {},不允许输入 null      * @param username 用户名(HTTP Basic Auchntication)      * @param password 密码(HTTP Basic Auchntication)      * @return 成功返回<code>Object[]</code>, 失败或异常返回null.      */     public static Object[] geObjectByAxis2RPCClient(String webServiceAddr, String webServiceMethod, String targetNamespace,              Object[] inputValues, Class<?>[] returnJavaTypes, String username, String password) {         Object[] resultObjArr = null;         try {             // 使用RPC方式调用WebService             if (serviceClient == null) {                 serviceClient = new RPCServiceClient();             }             Options options = serviceClient.getOptions();             options.setAction(targetNamespace + webServiceMethod);             // 指定调用WebService的URL             EndpointReference targetEPR = new EndpointReference(webServiceAddr);             options.setTo(targetEPR);                           if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {                 //身份验证(HTTP Basic Auchntication)                 HttpTransportProperties.Authenticator basicAuth = new HttpTransportProperties.Authenticator();                 basicAuth.setPreemptiveAuthentication(true);                 basicAuth.setUsername(username);                 basicAuth.setPassword(password);                 options.setProperty(HTTPConstants.AUTHENTICATE, basicAuth);             }                           //连接超时间设置 1min.             options.setTimeOutInMilliSeconds(60000);                           QName opAddEntry = new QName(targetNamespace, webServiceMethod);             resultObjArr = serviceClient.invokeBlocking(opAddEntry, inputValues, returnJavaTypes);         } catch (Exception e) {             // TODO: handle exception             resultObjArr = null;             String message = messageFormat("使用Axis2RPCClient调用WebService地址{{0}}方法{{1}}出现错误!", webServiceAddr, webServiceMethod);             //throw new InterfaceException(message);         }         return resultObjArr;     }          /**      *       * 用于能调用方法,参数传不过去的情况      * @param webServiceAddr Web Service的URL地址(需要加?wsdl)      * @param webServiceMethod WebService所操作的方法名称      * @param targetNamespace  WebServiceNamespace      * @param inputValues 所操作方法的参数值      * @return      */ public static Map<String, Object> getByAxis2ServiceClient(String webServiceAddr, String webServiceMethod, String targetNamespace, Object[] params, Object[] inputValues) { try { ServiceClient sender = new ServiceClient(); EndpointReference endpointReference = new EndpointReference(webServiceAddr); Options options = new Options(); options.setAction(targetNamespace + webServiceMethod); options.setTo(endpointReference); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); // 这个和qname差不多,设置命名空间 OMNamespace omNs = fac.createOMNamespace(targetNamespace, webServiceMethod); // 参数值 OMElement data = fac.createOMElement(webServiceMethod, omNs); for (int i = 0; i < params.length; i++) { OMElement inner = fac.createOMElement((String) params[i], omNs); inner.setText((String) inputValues[i]); data.addChild(inner); } // 发送数据,返回结果 OMElement result = sender.sendReceive(data); return getResults(result); } catch (Exception ex) { ex.printStackTrace(); return null; } } /** * axis2 OMElement转map * @param element axis2 OMElement对象 * @return */ public static Map<String, Object> getResults(OMElement element) {           if (element == null) {               return null;           }           Iterator iter = element.getChildElements();           Map<String, Object> map = new HashMap<String, Object>();           while (iter.hasNext()) {               OMNode omNode = (OMNode) iter.next();               if (omNode.getType() == OMNode.ELEMENT_NODE) {                   OMElement omElement = (OMElement) omNode;                   String key = omElement.getLocalName().trim();                   String value = omElement.getText().trim();                   map.put(key, value);               }           }           return map;       }   }
    转载请注明原文地址: https://ju.6miu.com/read-964178.html

    最新回复(0)