- 浏览: 932263 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
收藏列表
- 全部 [2]
- 怎样做才能成为程序员高手 [1]
- webservice学习收集 [1]
标题 | 标签 | 来源 | |
webservice学习收集 | webservice学习收集 | http://www.gjrencai.com/a/zonghejishu/20110913/3083.html | |
axis,jax-ws,xfire客户端调用分析,以及webservice万能客户端 2011-09-13 21:42 [小 大] 来源: 未知 转发至: 最近一个项目需要调用一个webservice接口,遇到一个问题.项目中的jdom版本为0.9.而webservice client需要用到jdom1.0 如果将jdom版本升级则会造成现有系统异常. 因此需要在不改变现有项目jar的情况下解决这个问题.service端使用的jax-ws2. wsdl如下: copyright 高级人才网 Java代码<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.hua-xia.com.cn/ZySearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.hua-xia.com.cn/ZySearch" name="UserLinkWebServiceService"> <types></types> 不要随便采集www.gjrencai.com的内容 <message name="getUserLink"> <part name="linkNo" type="xsd:string"></part> </message> <message name="getUserLinkResponse"> <part name="returnVal" type="xsd:string"></part> </message> <portType name="UserLinkWebService"> <operation name="getUserLink" parameterOrder="linkNo"> <input message="tns:getUserLink"></input> <output message="tns:getUserLinkResponse"></output> </operation> </portType> <binding name="UserLinkWebServicePortBinding" type="tns:UserLinkWebService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"></soap:binding> <operation name="getUserLink"> 高级人才网www.gjrencai.com,www.gjrencai.com java学习网 <soap:operation soapAction="getUserLink"></soap:operation> <input> <soap:body use="literal" namespace="http://www.hua-xia.com.cn/ZySearch"></soap:body> </input> <output> <soap:body use="literal" namespace="http://www.hua-xia.com.cn/ZySearch"></soap:body> </output> </operation> </binding> <service name="UserLinkWebServiceService"> <port name="UserLinkWebServicePort" binding="tns:UserLinkWebServicePortBinding"> <soap:address location="http://192.168.1.1.154:9010/ZySearch"></soap:address> </port> 本文来自高级人才网gjrencai.com </service> </definitions>1.xfire调用 对方给我们的client是使用xfire的client调用,代码如下: Java代码 package com.zhongying.bussserv.common; 本文来自高级人才网gjrencai.com import java.net.URL; import java.util.Map; import org.codehaus.xfire.client.Client; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; 高级人才网www.gjrencai.com,www.gjrencai.com java学习网 public class Test { gjrencai.com本来来自高级人才网 public static void main(String[] args) { String url = "http://192.168.1.1:8000/RES_Searcher/service/IUserLinkWebService?wsdl"; Client client; try { client = new Client(new URL(url)); Object params[] = {"123456"}; String result = (String)client.invoke("getUserLink", params)[0]; XStream xStream = new XStream(new DomDriver()); Map map = (Map)xStream.fromXML(result); } catch (Exception e) { 本文来自高级人才网gjrencai.com e.printStackTrace(); } } 不要随便采集www.gjrencai.com的内容 } gjrencai.com本来来自高级人才网 2.axis调用 但是由于jar包的原因,我们不能使用上面的方法,想出的第一个解决方案是使用axis的客户端来调用接口,代码如下: Java代码 import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; copyright 高级人才网 public class TestReflection { gjrencai.com本来来自高级人才网 public static void main(String[] arg) { gjrencai.com本来来自高级人才网 String url = "http://192.168.1.1:9010/ZySearch"; copyright 高级人才网 try { gjrencai.com本来来自高级人才网 Service service = new Service(); Call call = (Call) service.createCall(); // 设置调用服务地址 call.setTargetEndpointAddress(new java.net.URL(url)); //此处一定要配置wsdl的namespace参数http://www.hua-xia.com.cn/ZySearch call.setOperationName(new QName("http://www.hua-xia.com.cn/ZySearch", "getUserLink")); 本文来自 www.gjrencai.com //此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为null call.addParameter("linkNo",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //如果设置类传入参数类型,此处也需要设置返回参数类型 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); call.setUseSOAPAction(true); call.setSOAPActionURI(url); 本文来自 www.gjrencai.com String result = (String) call.invoke(new Object[] { "AD0006526305" }); 不要随便采集www.gjrencai.com的内容 XStream xStream = new XStream(new DomDriver()); Map map = (Map) xStream.fromXML(result); copyright 高级人才网 Iterator it = map.entrySet().iterator(); gjrencai.com本来来自高级人才网 while (it.hasNext()) { 不要随便采集www.gjrencai.com的内容 Map.Entry enty = (Entry) it.next(); 不要随便采集www.gjrencai.com的内容 System.out.println(enty.getKey() + ":" + enty.getValue()); copyright 高级人才网 } } catch (Exception e) { gjrencai.com本来来自高级人才网 e.printStackTrace(); } 不要随便采集www.gjrencai.com的内容 } } 本文来自高级人才网gjrencai.com 3.http模拟调用 由于开始对axis的了解有限,在写axis调用是总是有问题,于是便想了另外一个方法,这个方法有点剑走偏锋.但是适用性却很强,因为调用的是java自带的api不会产生兼容性问题. 大家知道webservice请求实际上也就是一个http请求,将数据通过xml文件进行交换. 既然知道了原理我们就可以模拟一个http请求来调用webservice. Java代码 try{ String url2 = "http://192.168.1.1:9010/ZySearch?wsdl"; 不要随便采集www.gjrencai.com的内容 URL getUrl = new URL(url2); 本文来自 www.gjrencai.com HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-type","text/xml"); connection.setRequestProperty("Accept","text/xml"); connection.setRequestProperty("User-Agent","JAX-WS RI 2.1.3-hudson-390-"); 本文来自 www.gjrencai.com String send="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soap:Body><ns1:getUserLink xmlns:ns1=\"http://www.hua-xia.com.cn/ZySearch\"><linkNo xmlns=\"\">"+par+"</linkNo></ns1:getUserLink></soap:Body></soap:Envelope>"; connection.getOutputStream().write(send.getBytes()); connection.getOutputStream().flush(); 本文来自高级人才网gjrencai.com connection.getOutputStream().close(); connection.connect(); // 取得输入流,并使用Reader读取 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));//设置编码,否则中文乱码 System.out.println("============================="); System.out.println("Contents of get request"); System.out.println("============================="); String lines=""; 本文来自高级人才网gjrencai.com String reuslts = ""; while ((lines = reader.readLine()) != null){ //lines = new String(lines.getBhqytes(), "utf-8"); reuslts+=lines.replaceAll("<", "<").replaceAll(">", ">"); } reader.close(); copyright 高级人才网 System.out.println("type:"+connection.getContentType()); // 断开连接 connection.disconnect(); System.out.println(reuslts); System.out.println("============================="); System.out.println("Contents of get request ends"); System.out.println("============================="); 本文来自高级人才网gjrencai.com XStream xStream = new XStream(new DomDriver()); reuslts = reuslts.substring(reuslts.indexOf("<returnVal>")+11); reuslts = reuslts.substring(0,reuslts.indexOf("</returnVal>")); System.out.println(reuslts); Map result = (Map)xStream.fromXML(reuslts); 不要随便采集www.gjrencai.com的内容 Iterator it = result.entrySet().iterator(); while(it.hasNext()){ Map.Entry enty = (Entry) it.next(); System.out.println(enty.getKey()+":"+enty.getValue()); } }catch(Exception e){ e.printStackTrace(); } 本文来自高级人才网gjrencai.com 4.jax-ws调用 最后再写上一个jax-ws的client代码 Java代码 import java.net.MalformedURLException; import java.util.Map; copyright 高级人才网 import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPBodyElement; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPMessage; import javax.xml.ws.BindingProvider; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; import javax.xml.ws.soap.SOAPBinding; 本文来自 www.gjrencai.com public class Client { // 名字空间 public static final String targetNamespace = "http://www.hua-xia.com.cn/ZySearch"; //服务名 public static final String serName = "UserLinkWebServiceService"; //端口名 public static final String pName = "UserLinkWebServicePort"; //服务地址 public static final String endpointAddress = "http://192.168.1.1:9010/ZySearch?wsdl"; //方法名 public static final String OPER_NAME = "getUserLink"; //参数名 public static final String INPUT_NMAE = "linkNo"; /** 本文来自高级人才网gjrencai.com * @param args * @throws MalformedURLException * @throws Exception */ public static void main(String[] args) throws MalformedURLException, Exception { // TODO Auto-generated method stub copyright 高级人才网 QName serviceName = new QName(targetNamespace, serName); QName portName = new QName(targetNamespace, pName); javax.xml.ws.Service service = Service.create(serviceName); service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); BindingProvider bp = (BindingProvider) dispatch; Map<String, Object> rc = bp.getRequestContext(); 本文来自高级人才网gjrencai.com rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, OPER_NAME); MessageFactory factory = ((SOAPBinding)bp.getBinding()).getMessageFactory(); SOAPMessage request = factory.createMessage(); SOAPBody body = request.getSOAPBody(); QName payloadName = new QName(targetNamespace, OPER_NAME, "ns1"); SOAPBodyElement payload = body.addBodyElement(payloadName); SOAPElement message = payload.addChildElement(INPUT_NMAE); message.addTextNode("AD0006526305"); 不要随便采集www.gjrencai.com的内容 SOAPMessage reply = null; try { reply = dispatch.invoke(request); } catch (WebServiceException wse) { wse.printStackTrace(); } SOAPBody soapBody = reply.getSOAPBody(); SOAPBodyElement nextSoapBodyElement = (SOAPBodyElement)soapBody.getChildElements().next (); SOAPElement soapElement = (SOAPElement)nextSoapBodyElement.getChildElements().next(); gjrencai.com本来来自高级人才网 System.out.println("获取回应信息为:" + soapElement.getValue()); } 高级人才网www.gjrencai.com,www.gjrencai.com java学习网 } 高级人才网www.gjrencai.com,www.gjrencai.com java学习网 |
|||
怎样做才能成为程序员高手 | 怎样做才能成为程序员高手 | ||
怎样做才能成为程序员高手 关于程序员励志方面的文章,我们曾介绍过不少,在这,给大家推荐两篇,《程序员深思 八种级别八种 人生》和《一定要理解程序员 程序员的坏习惯》,供参考。 估计很多的朋友在很小的时候就看过奥斯特洛夫斯基同学的《钢铁是怎样炼成的》,偶小时候在农村 混,看的最多是各式各样的牛屎以及长得极象牛屎的山头,这些所谓的名著偶直到大学才有机会拜读,但 说实话,偶是个俗人,还是更喜欢看一些痞子写的文字或带COLOR的BOOKS。偶之所以写这么个主题,主要 是太多的朋友给偶发EMAIL或在VCHOME.NET提问,偶其实也与大家一样为生活而奔波,因此没有时间一一 作答,在这作一次回答,还望海涵。 高手是一个哗众取宠的词汇,世上本来并没有高手,说的人多了也就有了高手,我看程序员只有老少 之分,并无高低之分,比如偶就是一个老程序员,因此作为程序员,我们追求的应该是写出有用有价值的 软件产品,呵呵,废话少说,切入正题吧! 1.迷恋 + 热情; 爱因斯坦同学说:兴趣是最好的老师,这就是说一个人一旦对某事物有了浓厚的兴趣,就会主动去求 知、去探索、去实践,并在求知、探索、实践中产生愉快的情绪和体验,并不断地激发学习的动力,这种 说法很美妙,众所周知,程序员是一种有点乏味有点枯燥有点辛苦的技术工作,要能坚持下去,并能做得 很好,没有迷恋没有热情是很难很难的,偶就很迷恋,迷恋C++ ,迷恋computer,迷恋network,偶迷恋 for、if、while、case等等就如同歌手迷恋五线谱的小蝌蚪一样,我觉得程序代码真是无所不能,简简单 单的几行代码就能实现丰富多彩的功能,你难道不觉得很NB吗?呵呵,因此,作为一名老程序员,我建议 年轻的程序员们一定要对coding保持迷恋保持热情,那样我们才有可能做得更好。 2.在项目中磨练与成长; 很多朋友经常问:他看了很多书,也做了较多的练习,但感觉水平并没有得到提高,这是为什么?呵 呵,我觉得每个人不同,有些程序员通过看书,也能学到很多东东,但我个人觉得最好的提高方法,还是 要参与到某一项目中去锻炼,从设计到开发到测试 到维护一整套的磨练流程,项目是有周期的,有周期 就有压力,有压力才能不分昼夜地去学习与实现,学习的效果也会很显著与深刻。 3.数不胜数的加班; 偶这里所讲的加班并不单指工作上的OT(即overtime),而更多的是学习上的OT,偶认为程序员学习 的黄金时间在毕业后的前三年,这三年你如果有一个好的环境好的团队好的上司,再加上你的勤奋努力, 三年后你将有一个质的飞跃,当然如果不幸,环境不好,团队不好,上司不好,那就只能靠你自已了,我 的哲学是:人的一生70%靠自已,因此你要有坚持不懈的精神,保持一颗积极上进的心,偶的那三年基本 上每天都在公司里呆到22点,即使回宿舍也是看书学习,偶比较笨,但可贵的是偶知道“笨鸟先飞”、“ 勤能补拙”诸如此类的大道理。没有人愿意平平庸庸地度过这一生,你努力了,你就成功了。 4.正确的学习方法; 也有很多朋友问学习方法,这是很让偶头痛的问题,其实我之前的文章中也有总结我的学方法:“简 单总结一下我的学习方法,笔者是按以下的顺序来学习的:C/C++ ――> SDK ――> MFC ――> COM/DCOM/ATL/COM+,当然这个顺序的前提是你已经具备了一定的数学,数据结构及算法,操作系统等基础 知识,学好C++是很关键的,尤其要理解清楚OOP思想,养成以面向对象方法去思考问题解决问题的习惯; 学习SDK的目的主要是理解Windows OS的内部机制比如内存管理,多任务及多线程等,特别要透彻地理解 Windows 的消息机制;有了前面的知识,学起MFC就容易了,有些网友经常与我聊,说他看了一年多的书 ,也写一些程序,但对MFC还是一头雾水,我想主要的原因还是学习不够系统性,很多知识及经验是循序 渐进的,千万不要幻想一步登天,要有持之以恒的学习及实践精神。” 我并不敢说,我的方法是正确的,只能说对我而言是合适的,作为老一辈的程序员,我们有幸学过与 写过很多纯windows的程序,我依然记得当年用 vc++1.5写的程序,都是用SDK,要写的代码很多很多,那 是个美好的年代,我怀念它。 5.失败--->打击--->努力--->成功--->成就感; 刚刚做程序员时,由于技术水平有限,经验也欠缺,因此经常会犯一些错误,也写了很多失败的程序 ,然后被上司骂得狗血淋头,那时非常地有挫折感,决定奋发图强,后来慢慢地长大,能写一些成功的程 序,受到一些表扬,那成就感真是爽呆了!这种过程经历得越多越好,我们的抗压能力会不断地提高,脸 皮也会越来越厚,呵呵,因此,奉劝各位程序员如果你暂时遇到挫折与失败,不要灰心丧气,不要退缩, 而要奋起直追,学好了,以后再去骂其它的初级程序员,呵呵,开玩笑的。 6.敢想+能说+会写; 中国的教育体制造就了太多太多的五好青年,循规蹈矩,逆来顺受,前怕狼后怕虎,缺乏创新意识, 这个社会什么都不缺,就缺敢想敢做的人。 能说对于程序员来讲,确实是要求过高,但如果你想走上较高的层次,偶认为这一点是很重要的,因 此我们需要寻找各种各样的机会来锻炼这方面的能力。 会写就是能写出漂亮的方案文档,能针对不同的客户写出不同的文档,比如技术文档,商务文档,销 售文档等。 7.善于利用各种资源; 这一点不用多说了,现在的资源很丰富,善于运用各种帮助文档,另外,互联网 上的资料应有尽有 ,要学会GOOGLE与使用。 8.细节决定高手。 老子说了:天下难事,必做于易;天下大事,必做于细。这句话精辟地指出了想成就一番大事业,必 须从简单的事情做起,从细微之处入手。随着现代社会分工的越来越细和专业化程度的越来越高,一个要 求精细化的管理和生活时代已经到来,亲爱的程序员朋友,请你注意了,编程越来越容易了,可恶的微软 与比哥一天到晚都在想如何让我们变得更傻,越来越依赖于他们的工具,在未来,也许什么人都能很容易 地做个程序员,到那时,如何来评价你的能力? 细节,这个行业,最终和最高的竞争层面就是细节的竞争。因此建议您把小事情做到位,养成良好的 习惯,具体点说:就是写好每一份注释,在提交文档之前要一而再再而三地检查,代码要简洁干净,每一 个算法都要高效。 希望通过以上内容的介绍,能给你带来一定的启发。 |