WSDL4J解析WSDL文件方法

利用wsdl4j解析WSDL文件

工具:wsdl4j1.6

解析wsdl文件是axis1.4的服务wsdl文件

wsdl文件:

 

<?xml version="1.0" encoding="UTF-8" ?>
-  <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/SayHelloService" 
xmlns:apachesoap="http://xml.apache.org/xml-soap" 
xmlns:impl="http://localhost:8080/axis/services/SayHelloService" 
xmlns:intf="http://localhost:8080/axis/services/SayHelloService" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <!--
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)
-->
- <wsdl:message name="sayHelloResponse">
  <wsdl:part name="sayHelloReturn" type="xsd:string" />
</wsdl:message>
- <wsdl:message name="sayHelloRequest">
  <wsdl:part name="name" type="xsd:string" />
</wsdl:message>
- <wsdl:portType name="SayHello">
- <wsdl:operation name="sayHello" parameterOrder="name">
  <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest" />
  <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="SayHelloServiceSoapBinding" type="impl:SayHello">
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="sayHello">
  <wsdlsoap:operation soapAction="" />
- <wsdl:input name="sayHelloRequest">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hello.com" use="encoded" />
</wsdl:input>
<wsdl:output name="sayHelloResponse">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/SayHelloService" use="encoded" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
-  <wsdl:service name="SayHelloService">
 - <wsdl:port binding="impl:SayHelloServiceSoapBinding" name="SayHelloService"
  <wsdlsoap:address location="http://localhost:8080/axis/services/SayHelloService" />
</wsdl:port>
</wsdl:service>

</wsdl:definitions>

 

下面是两个程序wsdl4j编写:

程序1:

view plaincopy to clipboardprint?
  1. package com.wxm;  
  2. import javax.wsdl.*;  
  3. import javax.wsdl.factory.*;  
  4. import javax.wsdl.xml.*;  
  5. public class ReadWsdl {  
  6. public static void main(String[]args)  
  7. {  
  8. try{  
  9. WSDLFactory factory=WSDLFactory.newInstance();  
  10. WSDLReader reader=factory.newWSDLReader();  
  11. reader.setFeature("javax.wsdl.verbose",true);  
  12. reader.setFeature("javax.wsdl.importDocuments",true);  
  13. Definition def=reader.readWSDL("http://localhost:8080/axis/services/SayHelloService?wsdl");  
  14. WSDLWriter writer=factory.newWSDLWriter();  
  15. writer.writeWSDL(def, System.out);  
  16. }catch(WSDLException e){e.printStackTrace();}   
  17. }  
  18. }  

 

程序2:

view plaincopy to clipboardprint?
  1. package com.wxm;  
  2. import javax.wsdl.*;  
  3. import javax.wsdl.extensions.*;  
  4. import javax.wsdl.factory.*;  
  5. import javax.wsdl.xml.*;  
  6. import javax.xml.namespace.QName;  
  7. import java.util.*;  
  8. import org.w3c.dom.*;  
  9. public class NavigatingWSDL {  
  10. public static void main(String[]args)  
  11. {  
  12. try{  
  13.    WSDLFactory factory=WSDLFactory.newInstance();  
  14.    WSDLReader reader=factory.newWSDLReader();  
  15.    reader.setFeature("javax.wsdl.verbose",true);  
  16.    reader.setFeature("javax.wsdl.importDocuments",true);  
  17.    Definition def=reader.readWSDL("http://localhost:8080/axis/services/SayHelloService?wsdl");  
  18.          //解析服务名   
  19.    System.out.println("----------");  
  20.    System.out.println("nService Name:");  
  21.    String tns="http://localhost:8080/axis/services/SayHelloService";  
  22.         Service service =def.getService(new QName(tns,"SayHelloService"));  
  23.    System.out.println(service.getQName().getLocalPart());  
  24.    //解析接口方法名  
  25.    System.out.println("nOperation Name:");  
  26.    Port port =service.getPort("SayHelloService");  
  27.    Binding binding=port.getBinding();  
  28.    PortType portType=binding.getPortType();  
  29.    List operations=portType.getOperations();  
  30.    Iterator operIter=operations.iterator();  
  31.    while(operIter.hasNext())  
  32.    {  
  33.     Operation operation=(Operation)operIter.next();  
  34.     if(!operation.isUndefined())  
  35.     {System.out.println(operation.getName()) ;}  
  36.    }  
  37.    //解析消息,输入输出  
  38.    System.out.println("nMessages:");  
  39.    Map messages=def.getMessages();  
  40.    Iterator msgIter=messages.values().iterator();  
  41.    while(msgIter.hasNext())  
  42.    {  
  43.     Message msg=(Message)msgIter.next();  
  44.     if(!msg.isUndefined())  
  45.     {  
  46.      System.out.println(msg.getQName().getLocalPart());  
  47.      Iterator partIter=msg.getParts().values().iterator();  
  48.      while(partIter.hasNext())  
  49.      {  
  50.       Part part=(Part) partIter.next();  
  51.       System.out.print("parameter name:"+part.getName()+"t");  
  52.       System.out.println("parameter type:"+part.getTypeName().getLocalPart());  
  53.      }  
  54.     }       
  55.    }  
  56.    //解析服务地址  
  57.    System.out.println("nService location:");  
  58.    List l=port.getExtensibilityElements();  
  59.    ExtensibilityElement element=(ExtensibilityElement) l.get(0);  
  60.    String s=element.toString();  
  61.      System.out.println(s.substring(s.indexOf("location")));  
  62.      System.out.println("---------");  
  63.     
  64. }catch(WSDLException e){e.printStackTrace();}   
  65. }  
  66. }  

 可以解析出wsdl文件的服务名,操作接口名,服务地址等

 

转:http://blog.sina.com.cn/s/blog_5ee36ce70100nk97.html

转载于:https://www.cnblogs.com/xijin-wu/p/6890058.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解线程池

概念&#xff1a; 什么是线程池: 线程池是用来存储多线程的容器&#xff0c;是一种处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。 线程池使用和不使用的区别&#xff1a; 因为系统创建线程池的成本很高&#xff0c;会涉及到…

git revert

1. 我认为这是正确的做法&#xff1a; git fetch --all git reset --hard origin/mastergit fetch下载远程最新的&#xff0c;但不尝试&#xff0c;或重订任何东西。 然后&#xff0c;git resetmaster分支重置到你刚才牵强。 2. 试试这个&#xff1a; git reset --hard HEAD gi…

oracle 内存分配,Oracle调优修改10g,11g内存分配

先查看数据库是否使用spfile启动&#xff0c;如果不是的话&#xff0c;只需要在pfile中修改&#xff0c;然后重启数据库即可SQL> show parameter spfile;NAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string D:\…

在sql server数据库的一个表中如何查询共有多少字段

select a.* from sys.columns a,sys.tables bwhere a.object_id b.object_id and b.name 要查的表名转载于:https://www.cnblogs.com/firstdream/p/6899224.html

oracle自带的sql语言环境变量,Oracle技术网—SQL*Plus系统环境变量有哪些?如何修改?...

实现方法&#xff1a;show和set命令是两条用于维护SQL*Plus系统变量的命令SQL> show all--查看所有68个系统变量值SQL> show user--显示当前连接用户SQL> show error                --显示错误SQL> set heading off--禁止输出列标题&#xff0c;默…

第二个冲刺周期第二天

昨天实现了基本登录界面&#xff0c;今天对登录界面进行了进一步完善&#xff0c;遇到的问题就是如何把登录跟主界面连接起来&#xff0c;明天继续完善登录界面。转载于:https://www.cnblogs.com/1998lu/p/6926154.html

oracle 导出数据 utl,使用utl_file做选择性数据导出

在平时的数据导出中使用exp/expdp能够满足绝大部分的数据导出任务。如果有一些表的数据不多&#xff0c;但是查询条件要复杂一些&#xff0c;使用exp/expdp就很吃力了。或者在和外部系统的交互中&#xff0c;使用xml或者文本文件是一个很兼容的选择&#xff0c;这个时候使用exp…

oracle 10g express linux,在Ubuntu下安装Oracle Database 10g Express Edition

Oracle 10g有一款XE版&#xff0c;意为体验版&#xff0c;限制是不支持多CPU和数据库大小不能超过2G(还有其他的什么&#xff0c;不记得了&#xff0c;Oracle官方网站有写)。对于开发的时候调试一下&#xff0c;体验一下还是够用的。关键大小比较适中&#xff0c;安装包200多M。…

表单打印功能

表单打印的2种方式 一、支持不同的浏览器 1、表单打印功能调用window.print() 就可以打印了 2、如果只打印表单上的一部分样式&#xff0c;将不想打印的部分写在media print中&#xff0c;隐藏掉 <style>   media print{     .Noprint{       display:none; …

oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例

原标题&#xff1a;RH2288H V3服务器硬盘亮黄灯故障处理案例本文广州诚本将分享RH2288H V3服务器硬盘亮黄灯故障处理案例&#xff0c;希望对大家的工作有所帮助。问题描述某客户新开局的项目&#xff0c;采购一批RH2288H V3的服务器&#xff0c;做RAID时发现其中一台服务器一块…

5.Lock接口及其实现ReentrantLock

jdk1.7.0_79 在java.util.concurrent.locks这个包中定义了和synchronized不一样的锁&#xff0c;重入锁——ReentrantLock&#xff0c;读写锁——ReadWriteLock等。在已经有了内置锁synchronized的情况下&#xff0c;为什么又出现了Lock显示锁呢&#xff1f;本文将以Lock作为Ja…

oracle近三个月内,在oracle中的前三个月SQL

我有以下的sql&#xff0c;它给了我最后一整个三个月的人处理的档案报告&#xff0c;但我想采用它&#xff0c;以便从前三个月获得这些&#xff0c;例如&#xff0c;当我运行现在我应该从2011年10月11日和12日以及2012年1月2日和3日的4月份获得档案。有人可以提出一个建议&…

什么是递归

概念&#xff1a; 递归指的是方法定义中调用方法本身的现象&#xff08;自己调自己&#xff09;把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算 递归注意事项&#xff1a; 递归一定要有出口。…

错误问题

1、系统出现如下错误&#xff1a;warning: LF will be replaced by CRLF 原因分析&#xff1a; CRLF -- Carriage-Return Line-Feed 回车换行 就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。 这两个ACSII字符不会在屏幕有任何输出&#xff0c;但在Windows中广泛使用来标…

oracle监听为blocked,关于“Instance +ASM1, status BLOCKED, ”

确实是可以的~只是需要配置一下~不过这个如果不操作ASM instacne的话没什么用Applies to:Oracle Net Services - Version: 10.1.0.4.0 to 10.2.0.4.0Information in this document applies to any platform.SymptomsChecking the listener status, ASM instance is shown as BL…

彻底学会IO流

概述&#xff1a; IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载IO的数据传输&#xff0c;可以看做是一种数据的流动&#xff0c;按照流动的方向&#xff0c;已内存为参照物&#xff0c;进行读写操作IO可以保存到文件&#xff0c;其实就是内…

一些芯片资料

74hc14d u10 u11 u12 六反相触发器 74HC244 三态八缓冲器 u15 u13 uln2003afwg u16 74HC07 u17 L298N 步进电机驱动芯片 MOS管认知 转载于:https://www.cnblogs.com/legion/p/6908434.html

debian php安装pdo扩展,docker安装PHP扩展2020-05-25

示例&#xff1a;1、docker-php-ext-install pdo_mysql2、extensionphp_pdo_mysql.dll一、docker按照PHP扩展先删除原来的composer容器&#xff0c;重新执行以下命令&#xff1a;docker run -it --name composer -v E:\docker\nginx\www\YYXTServer:/app --privilegedtrue comp…

DP Intro - Tree DP Examples

因为上次比赛sb地把一道树形dp当费用流做了&#xff0c;受了点刺激&#xff0c;用一天时间稍微搞一下树形DP&#xff0c;今后再好好搞一下&#xff09; 基于背包原理的树形DP poj 1947 Rebuilding Roads 题意&#xff1a;给你一棵树,让你求最少剪掉多少条边可以剪出一棵点数为m…

强大的缓冲流

概述&#xff1a; 缓冲流的概述BufferedInputStream: 字节输入缓冲流BufferedOutputStream: 字节输出缓冲流四种方式复制字符缓冲流文本排序字符流读字符乱码问题InputStreamReader转换流读取字符数据OutputStreamWriter转换流写字符数据转换文件编码 1.缓冲流的概述&#xf…