惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

博客园 - Richard

使用Expresso学习.net正则表达式 Learning .NET Regular Expressions with Expresso SWOT分析法 Symbian60第二版拍照功能实现 WindowsMobile2003拨号回拨 Windows2003Web权限问题 佣兵天下-看书 以前用过的的一个线程池代码 Symbian60平台开发环境搭建 回归 虚函数,看看吧 sizeof讨厌的东西 C# 下的struct Black Berry 无尽空虚 读取ini配置文件的API C#今天学的知识 急用抄过来不整理了-Access 设置控件输入的输入方式-补充
J2ME下访问.net的webservice
Richard · 2005-11-25 · via 博客园 - Richard

如何通过j2me来实现访问webservice比较常用的方法使用ksoap或者是支持Jsr172的直接使用哪个ws包就行了。访问.net创建的webservice比较麻烦。如果是支持jsr172的设备可以使用wtk2.2直接生成桩,就是生个stub和几个访问类就可以实现对webservice的访问,但要注意返回类型,如果webservice的返回类型不是wtk能支持的话就会生成失败。
如果不支持jsr172的就比较麻烦,可以使用ksoap来做soap协议解析,完成对webservice访问。我试用了ksoap2不知道老是不成功,报错误是因为kxml中的xmlpull有问题。找不到哪个v11的类。感觉用ksoap2会是一个访问.net webservice的好选择,因为它内置了.net支持的选择,可以配置rpc与net选择。但是因为不成功,所以不能不转到ksoap来想办法。
使用它的例子程序作了一个helloworld程序,呵呵不成功,改造它的httptransport类,将发送和接收的soap包打印处出进行比较,发现是soap标签不一致,我用.net的webservice支持的soap标签是soapenc之类的,而使用ksoap打出来的包都是SOAP-ENC之类的。没办法手工改吧。修改org.ksoap.soap.java文件找到SOAP-ENC,SOAP-ENV之类的改成soapenc,soapenv之类。改完了运行,还是出错,察看输入soap包比对.net webservice要求的soap包发现包头少了不少东西。发现该问题是org.kxml.parser.AbstractXmlParser.java文件中public void startTag (PrefixMap prefixMap,String namespace, String name) 方法有问题,其中有个do,while循环存在问题
修改为
do {
  String p2 = current.getPrefix ();
  String ns = current.getNamespace ();
  if (!ns.equals (oldMap.getNamespace (p2))) {
      attribute (p2.equals ("") ? "xmlns" : ("xmlns:"+p2), ns);
        }
  current = current.getPrevious ();
     }
     while (current != null && current != oldMap);
原有方法没有将当前PrefixMap的后继PrefixMap中信息写入所以导致一个标签内的信息不全。修改后运行还是存在问题,根据返回soap包内容发现改造后的包头竟然有两项重复出现,经检查为soap.java内初始化PrefixMap数组时存在问题,原有方法定义一个basePrefixMap,而下面在个协议中使用该PrefixMap构造,所以导致V11与V12版本的soap包头重复出现soapenv与soapenc修改之
public static final PrefixMap [] prefixMap = {
 new PrefixMap (new PrefixMap
     (basePrefixMap, "xsd", XSD1999), "xsi", XSI1999),
 new PrefixMap (new PrefixMap (new PrefixMap (new PrefixMap
     (PrefixMap.DEFAULT, "xsd", XSD), "xsi", XSI), "soap", ENV), "soapenc", ENC),
 new PrefixMap (new PrefixMap (new PrefixMap (new PrefixMap
     (PrefixMap.DEFAULT, "xsd", XSD), "xsi", XSI), "soap", ENV2001), "soapenc", ENC2001)};
 这样就好了,哈哈。不过运行还是出错。是enc与env的协议不匹配,呵呵我用的V12也就是2001没想到竟然不对,改用V11后问题解决,不过不是可以运行,使这个问题不出了,出现另外问题,soap返回fault代码是soapAction不存在,比对后发现,比较变态的说,这个SoapAction必须和.net webservice给出的一样才行,而且有些是namespace+method有些不是。累,指定SoapAction为namespace+method,例如这个SoapAction就是"http://ww.tmp.com/method",而那个url就是http://yourserver/yourservice.asmx;这样终于可以访问了。
漏了一句,如果想要访问.net的webservice我用的[WebMethod,SoapRpcMethod]在每个需要访问的服务方法上面。如果不添那个SoapRpcMethod就不能用呀。
终于搞定。

posted on 2005-11-25 11:36  Richard  阅读(1272)  评论()    收藏  举报