axis1 import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class Axis1ClientUitl { public static Object callService(String url,Class type,String method,Object[] args){ Call call = initCall(url, method); //执行方法并带上参数 Object result=null; try { result = call.invoke(args); } catch (RemoteException e) { e.printStackTrace(); } return result; } private static Call initCall(String url, String method) { Service service = new Service(); Call call = null; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); call.setOperationName(new javax.xml.namespace.QName("urn:sap-com:document:sap:soap:functions:mc-style", method)); call.setReturnClass(org.w3c.dom.Element.class); call.addParameter("op1", XMLType.XSD_STRING, ParameterMode.IN); } catch (Exception e) { e.printStackTrace(); } return call; } }
AXIS2
import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class Axis2ClientUtil { /** * 初始化调用客户端 * @return */ private static RPCServiceClient initServiceClient(String serviceURL){ // 使用RPC方式调用WebService RPCServiceClient serviceClient; try { serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(serviceURL); options.setTo(targetEPR); return serviceClient; } catch (AxisFault e) { e.printStackTrace(); } return null; } /** * 调用service * @return */ public static Object[] callService(String serviceURL,Class type,String methodName,String args){ try { RPCServiceClient service2Client = initServiceClient(serviceURL); // 指定methodName方法的参数值 Object[] opAddEntryArgs = new Object[] {args}; // 指定methodName方法返回值的数据类型的Class对象 Class[] classes = new Class[] {type}; // 指定要调用的methodName方法及WSDL文件的命名空间 QName opAddEntry = new QName("urn:sap-com:document:sap:soap:functions:mc-style", methodName); return service2Client.invokeBlocking(opAddEntry, opAddEntryArgs,classes); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
JAVA.NET URL方式调用
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; public class UrlCallServiceUtil { /** * * @param strURL 要调用的url地址 * @param strCharse 设置字符编码方式,为null,设置为utf8 * @return * @throws Exception */ public static String postRequest(String strURL, String strCharset) throws Exception { if ((strURL == null) || (strURL.length() == 0)) return null; if ((strCharset == null) || (strCharset.length() == 0)) { strCharset = "UTF-8"; } String[] arrContent = (String[]) null; if (strURL.indexOf("?") > -1) { arrContent = string2Array(strURL.substring(strURL.indexOf("?") + 1), '&', false); strURL = strURL.substring(0, strURL.indexOf("?")); } StringBuffer sb = new StringBuffer(); HttpURLConnection con = null; try { URL url = new URL(strURL); con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); con.setDoInput(true); con.setInstanceFollowRedirects(true); con.setRequestMethod("POST"); con.addRequestProperty("Content-type","application/x-www-form-urlencoded"); con.setUseCaches(false); con.connect(); if ((arrContent != null) && (arrContent.length > 0)) { StringBuffer sbContent = new StringBuffer(); for (int i = 0; i < arrContent.length; i++) { if ((arrContent[i] == null) || (arrContent[i].indexOf("=") == -1)) continue; sbContent.append(arrContent[i].substring(0, arrContent[i].indexOf("="))).append("="); sbContent.append(URLEncoder.encode(arrContent[i].substring(arrContent[i].indexOf("=") + 1),strCharset)).append("&"); } DataOutputStream out = new DataOutputStream(con.getOutputStream()); out.writeBytes(sbContent.toString()); out.flush(); out.close(); } BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), strCharset)); String line; while ((line = reader.readLine()) != null) { sb.append(line); } con.disconnect(); return sb.toString(); } catch (Exception e) { System.out.print(e.getMessage()); sb.append(e.getMessage()); String str1 = sb.toString(); return str1; } finally { if (con != null) con = null; } } public static String[] string2Array(String s, char delim, boolean trim) { if (s.length() == 0) return new String[] {}; List<String> a = new ArrayList<String>(); char c; int start = 0, end = 0, len = s.length(); for (; end < len; ++end) { c = s.charAt(end); if (c == delim) { String p = s.substring(start, end); a.add(trim ? p.trim() : p); start = end + 1; } } String p = s.substring(start, end); a.add(trim ? p.trim() : p); return (String[]) a.toArray(new String[a.size()]); } }
最后一种,也是最笨的一种-----最原始(因为webservice能够跨语言是因为它在网络上请求,回应的数据结构是固定的或者说是标准)
TIPS:所有的语言封装的webservice,其底层都是传输的相同的xml文件
所以我们也可以自己手动拼接SOAP XML然后用url发送代码如下
SoapTap类
import java.util.List; /** * soap标签 * @author Administrator * */ public class SoapTag { private String tagName;//标签名称 private String tagValue;//标签值 private String tagAttr;//标签属性 private List<SoapTag> children;//子标签 private SoapTag parent;//父类标签 public String getTagName() { return tagName; } public void setTagName(String tagName) { this.tagName = tagName; } public String getTagValue() { return tagValue; } public void setTagValue(String tagValue) { this.tagValue = tagValue; } public List<SoapTag> getChildren() { return children; } public void setChildren(List<SoapTag> children) { this.children = children; } public SoapTag getParent() { return parent; } public void setParent(SoapTag parent) { this.parent = parent; } public String getTagAttr() { return tagAttr; } public void setTagAttr(String tagAttr) { this.tagAttr = tagAttr; } /** * 转化为soapxml * @return */ public String toSoapStr(StringBuilder retSoap){ retSoap.append(createTagL()); List<SoapTag> kids = getChildren();//拿到子节点 if(kids != null&&kids.size()>0){ for(SoapTag tag:kids){ tag.toSoapStr(retSoap); } } retSoap.append(createTagR()); return retSoap.toString(); } /** * 生成单个tag标签左边 * @param name * @param value * @return */ private String createTagL(){ return "<"+getTagName()+">"; } /** * 生成单个tag标签右边 * @param name * @param value * @return */ private String createTagR(){ return "</"+getTagName()+">"; } }
工具类(项目中有特殊情况的逻辑,自己改吧改吧)
import org.apache.log4j.Logger; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class SoapHttpUtil { private static Logger log = Logger.getLogger(SoapHttpUtil.class); private static Map<String,String> tagMap = new LinkedHashMap<String, String>(); static{ tagMap.put("Strcustid", null); tagMap.put("TActivities", "CustId,ActiId,ActiType,ActiCodeNm,TitleNm,StartDt,EndDt,ActiStatus,ActiContent,MangerNms,CusPartis,InformantNm,ReportDt,Attachement"); tagMap.put("TContact", "CustId,Name,Sex,DepNm,Post,Email,FixTel,Mobile,IsMainContact"); tagMap.put("TIbs", "CustId,IbsId,Name,RelationType,RelationName,DepNm,Email,FixTel,Mobile,IsMainIbs"); tagMap.put("TabCondition", "ConField,ConHigh,ConLow,ConOption,ConSign"); } /** * 调用机构CRM用户新增接口 * @param serviceURL endpoint * @param paramMap * @return */ public static String callService(String serviceURL,String custid){ // 生成XML String soapBody = getSoapBody("ZcsGetcustinfoforcrm","urn:sap-com:document:sap:soap:functions:mc-style",custid); // 发送soap1.1请求 Map<String,String> retSoap = doSoapPostRequest(serviceURL, soapBody, "utf-8"); // 解析结果并返回 StringBuilder retBuilder = new StringBuilder(); return parseResponse(retSoap.get("RESULT")); } /** * 根据参数生成soap发送的xml * @param paramMap * @return */ public static String getSoapBody(String actionurn,String namespace,String custids) { StringBuilder sb = new StringBuilder(); sb.append("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' "); sb.append(" xmlns:urn='"+namespace+"'>\n"); sb.append(" <soapenv:Header/>\n"); sb.append(" <soapenv:Body>\n"); sb.append(" <urn:"+actionurn+">\n"); createSopTag(sb,tagMap,custids);//调用内部类 sb.append(" </urn:"+actionurn+">\n"); sb.append(" </soapenv:Body>\n"); sb.append("</soapenv:Envelope>"); return sb.toString(); } /** * 子类tag */ private static void createSopTag(StringBuilder ret,Map<String,String> _tagMap,String param){ for(Entry<String, String> entry:_tagMap.entrySet()){ String key = entry.getKey(); String value = entry.getValue(); if(value == null){ ret.append("<"+key+">" + param+"</"+key+">"); }else{ String values[] = value.split(",");// List<SoapTag> kid = new ArrayList<SoapTag>(); List<SoapTag> itemKid = new ArrayList<SoapTag>(); SoapTag parent = new SoapTag(); parent.setTagName(key); parent.setTagValue(""); SoapTag itemTag = new SoapTag();//itemTag itemTag.setTagName("item"); kid.add(itemTag); for(String kidTag:values){ SoapTag kidtag = new SoapTag(); kidtag.setTagName(kidTag); kidtag.setTagValue(""); itemKid.add(kidtag); } itemTag.setChildren(itemKid); parent.setChildren(kid); parent.toSoapStr(ret);//转化为tagxml } } } /** * 解析结果 * @param respStr * @return */ public static String parseResponse(String respStr){ StringBuilder active = new StringBuilder();//活动服务 StringBuilder ourcust = new StringBuilder();//我方联系人 StringBuilder cust = new StringBuilder();//客户方联系人 Map<String, String> map = new HashMap<String, String>(); Document soupdoc = null; try { soupdoc = Jsoup.parse(respStr); } catch (Exception e) { log.error("接口返回结果无法解析", e); throw new RuntimeException("接口返回结果无法解析", e); } Elements activities = soupdoc.select("TActivities");//活动服务记录 Elements contact = soupdoc.select("TContact");//客户方联系人 Elements ibs = soupdoc.select("TIbs");//我方跟踪团队 parseEles(active,activities.get(0).children()); parseEles(cust,contact.get(0).children()); parseEles(ourcust,ibs.get(0).children()); String activsJson = finalJson("active",active); String custjson = finalJson("cust",cust); String ourcustjson = finalJson("ourcust",ourcust); return "{" + activsJson +","+custjson+","+ourcustjson+"}"; } /** * @return */ private static String finalJson(String name ,StringBuilder json){ String _name = toJsonStyle(name); String items = json.substring(0,json.lastIndexOf(",")); return ""+_name+":["+items+"]"; } /** * item节点 * @param retBuilder * @param els * @return */ private static String parseEles(StringBuilder retBuilder,Elements els){ for(int i = 0 ;i < els.size();i++){ Element e = els.get(i); parseChildren(retBuilder,e.children()); } return null; } /** * 解析子节点 * @return */ private static String parseChildren(StringBuilder retBuilder,Elements els){ StringBuilder tempBuilder = new StringBuilder(); tempBuilder.append("{"); for(int i = 0 ;i < els.size();i++){ Element e = els.get(i); String jitem = toJson(e); tempBuilder.append(jitem+","); } String temp = tempBuilder.substring(0, tempBuilder.lastIndexOf(",")); retBuilder.append(temp + "},"); return retBuilder.toString(); } /** * 转换为json对象 * @return */ private static String toJson(Element e){ String name = e.tagName().toUpperCase(); String value = e.text(); return toJsonStyle(name) + ":" + toJsonStyle(value); } /** * 转换为json格式加双引号 * @return */ public static String toJsonStyle(String value){ return "\""+value+"\""; } /** * Post提交 * @param urlstr * @param body * @return */ public static Map<String, String> doSoapPostRequest(String urlstr, String body, String charset) { Map<String, String> reMap = new HashMap<String, String>(); int resCode = -1; //返回状态值 String resMsg = ""; //返回信息 HttpURLConnection httpConn = null; OutputStream out = null; BufferedReader bfw = null; String line = null; StringBuffer sb = new StringBuffer(); try { URL url = new URL(urlstr); httpConn = (HttpURLConnection) url.openConnection(); httpConn.setRequestMethod("POST"); if (charset == null) { httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); }else { httpConn.setRequestProperty("Content-Type", "text/xml; charset=" + charset); httpConn.setRequestProperty("SOAPAction", urlstr); } httpConn.setUseCaches(false); httpConn.setInstanceFollowRedirects(false); httpConn.setConnectTimeout(5000); httpConn.setReadTimeout(10000); httpConn.setDoInput(true); httpConn.setDoOutput(true); out = httpConn.getOutputStream(); out.write(body.getBytes("UTF-8")); out.flush(); } catch (MalformedURLException e) { log.error("请求异常", e); throw new RuntimeException("请求异常", e); } catch (ProtocolException e) { log.error("请求异常", e); throw new RuntimeException("请求异常", e); } catch (IOException e) { log.error("请求异常", e); throw new RuntimeException("请求异常", e); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } // 结果处理 try { // 获取返回值 resCode = httpConn.getResponseCode(); resMsg = httpConn.getResponseMessage(); if (resCode == 200) { bfw = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "utf-8")); while ((line = bfw.readLine()) != null) { String curLine = line.trim(); if (!isEmpty(curLine)) sb.append(curLine); } reMap.put("CODE", "1"); reMap.put("RESULT", sb.toString()); } else { reMap.put("CODE","-1"); reMap.put("RESULT","code=" + resCode+",msg=" + resMsg); } } catch (IOException e) { log.error("返回结果读取异常", e); throw new RuntimeException("返回结果读取异常", e); } finally { if (bfw != null) { try { bfw.close(); } catch (IOException e) { e.printStackTrace(); } } } return reMap; } /** * 判断字符串是否为空 * @param src * @return */ public static boolean isEmpty(String src) { return src == null || src.trim().length() <= 0; } public static void main(String[] args) throws Exception{ SoapHttpUtil ws = new SoapHttpUtil(); String serviceURL = "test.do"; String ret = ws.callService(serviceURL, "1000004106"); System.out.println(ret); } }
相关推荐
xfire webservice 集成spring客户端封装成到一个类打包到客户端就像调静态方法一样
本示例工程涵盖了WebService服务端和客户端的实现,帮助开发者更好地理解和应用WebService技术。 服务端开发: 在服务端,我们通常会创建一个SOAP(Simple Object Access Protocol)服务,它是WebService最常见的一...
- **生成客户端代理**:使用`wsimport`工具,根据服务的WSDL生成客户端所需的Java类,这些类封装了与服务交互的逻辑。 - **实例化客户端代理**:创建客户端代理类的实例,通过调用其方法来执行Web服务请求。 - **...
这些代码包含了客户端 stubs 和 skeletons,用于封装和解封装SOAP消息。一旦客户端代码生成,你就可以像调用本地方法一样调用远程的WebService。 在实际应用中,你还需要考虑安全性、性能优化、错误处理等问题。...
2. **生成客户端代理类**:上一步生成的客户端代理类包含了与WebService交互所需的所有方法。这些类提供了调用服务端操作的接口,封装了底层的SOAP消息发送和接收。 3. **实例化客户端代理**:在Java代码中,我们...
本资源“webservice for axis客户端详尽代码”提供了一套完整的Axis客户端代码示例,对于学习和理解如何在Java应用中使用Axis来调用Web服务极具价值。 一、Web Service基础知识 Web服务通常通过SOAP(Simple ...
WebService客户端是基于Web服务技术的一种应用程序,它允许不同的系统之间通过互联网进行通信和交互。在分布式计算环境中,WebService客户端扮演着关键角色,使得各种应用程序能够跨平台、跨语言地共享数据和服务。 ...
本压缩包包含的"webservice服务器端和客户端源码"提供了实现Web服务的基本框架,让我们来详细探讨其中涉及的知识点。 一、Web服务基础 1. SOAP(Simple Object Access Protocol):Web服务的核心协议,用于交换结构...
简单的webservice示例,及使用java工具生成客户端 在JDK1.6版本以后,在<JAVA_HOME>/bin目录下有一个wsimport.exe工具,该工具可以根据wsdl文件自动生成webservice接口调用的java客户端代码,十分方便。而自己仅需要...
总结来说,本实例涉及的是在Windows 7环境下,使用Apache Tomcat和JDK创建一个基于JAX-WS的WebService客户端。这个过程包括获取WSDL文件,生成客户端代码,编写应用程序,部署和运行。理解并掌握这些步骤对于开发与...
客户端生成工具是实现Web服务交互的关键组件,它能够帮助开发者自动创建与WebService接口进行通信的客户端代码,大大简化了开发流程。本文将详细介绍关于Web服务客户端生成工具的相关知识点。 1. **Web服务标准与...
这些类封装了调用WebService的方法。 3. **实例化客户端**:创建代理类的实例,设置服务的地址(端点URL)。 ```java Service service = Service.create(new URL("http://example.com/UserService?wsdl"), new ...
标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...
本项目提供了WebService服务器和客户端的系统代码,便于在本地进行测试和调试。 首先,让我们深入了解一下`SpringBoot`。SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它...
这些代理类封装了调用远程服务的方法,使得开发者可以像调用本地方法一样调用Web服务。 对象传递是XFire的一大特色,它使得复杂的业务对象能够在Web服务之间无缝传递。在传统的Web服务中,通常需要将对象转换为XML...
6. **WebService的通用封装类RemoteCaller** 文档的另一部分内容中出现了一个名为RemoteCaller的封装类。这个类可能是封装了调用WebService方法的一个通用工具类,通过封装通用的调用逻辑,简化了客户端调用...
客户端通过发送SOAP消息与服务器进行通信,SOAP是一种XML格式的消息协议,用于封装请求和响应数据。 在通信过程中,配置文件起着至关重要的作用。对于服务器,可能包含有关监听端口、服务绑定地址、服务部署路径等...
这些类封装了与Web Service交互的细节。 - **设置必要的库和头文件**:添加生成的代理类文件到项目中,并包含所需的库和头文件,如`atlbase.h`, `atlcom.h`, `atlconv.h`等。 - **实例化和服务调用**:在代码中...
标题“php编写webservice soap服务端及客户端”意味着我们将讨论如何使用PHP实现SOAP协议的两个关键部分:服务提供者和服务消费者。 首先,让我们深入了解PHP如何构建SOAP服务端。在PHP中,我们可以使用SoapServer...
在Java中,调用WebService客户端通常涉及以下步骤: 1. **理解SOAP协议**:WebService主要基于SOAP(Simple Object Access Protocol)协议,它是XML格式的消息传输协议,用于交换结构化和类型化的信息。理解SOAP...