java 简单解析wsdl

static void resolve(String wsdl) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();

    InputStream in = new ByteArrayInputStream(wsdl.getBytes("utf-8"));
    InputStreamReader isr = new InputStreamReader(in, "utf-8");

    InputSource is = new InputSource(isr);
    Document doc = builder.parse(is);

    System.out.println("root:" + doc.getFirstChild().getNodeName());

    NodeList nodeList = doc.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "definitions");
    Node root = nodeList.item(0);
    NamedNodeMap map = root.getAttributes();
    Node targetNs = map.getNamedItem("targetNamespace");
    System.out.println("名称空间:" + targetNs.getNodeValue());

    String wsdlNsUri = "http://schemas.xmlsoap.org/wsdl/";

    NodeList bindingNodes = doc.getElementsByTagNameNS(wsdlNsUri, "binding");
    Node bindingNode = bindingNodes.item(0);
    String serviceName = bindingNode.getAttributes().getNamedItem("name").getNodeValue();
    System.out.println("服务名:" + serviceName);

    NodeList serviceNodes = doc.getElementsByTagNameNS(wsdlNsUri, "service");
    Node serviceNode = serviceNodes.item(0);
    NodeList portNodes = serviceNode.getChildNodes();

    String bindingAddress = null;
    Node addressNode = portNodes.item(1).getChildNodes().item(1);
    bindingAddress = addressNode.getAttributes().getNamedItem("location").getNodeValue();
    System.out.println("调用地址:" + bindingAddress);

    NodeList portTypeNodes = doc.getElementsByTagNameNS(wsdlNsUri, "portType");
    Node portType = portTypeNodes.item(0);
    NodeList opNodes = portType.getChildNodes();
    for (int i = 0; i < opNodes.getLength(); i++) {
        Node node = opNodes.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE && node.getLocalName().equalsIgnoreCase("operation")) {
            String methodName = node.getAttributes().getNamedItem("name").getNodeValue();
            System.out.println("方法名:" + methodName);
        }
    }
}
时间: 2024-08-25 09:01:13

java 简单解析wsdl的相关文章

JAVA - Sql解析工具fdb-sql-parser简单使用

由于想要解决Mybatis分页插件中count查询效率问题,因为order by很影响效率,所以需要一种方式处理sql,将order by 语句去掉. 试了好几个sql解析工具,最后选择了fdb-sql-parser. Maven依赖: <dependency> <groupId>com.foundationdb</groupId> <artifactId>fdb-sql-parser</artifactId> <version>1.

[ 转载 ] Java基础10--关于Object类下所有方法的简单解析

关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直接来看jdk的源码,开始我们的分析之路 1.hashcode() public native int hashCode();//native说明跟机器有关,跟对象的地址有关 如果我们新建一个类,而hashcode没有被重写的话,那么hashcode返回的值只于对象的地址有关,如果hashcode被重

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBu

对 cloudwu 简单的 cstring 进行简单解析

题外话 以前也用C写过字符串,主要应用的领域是,大字符串,文件读取方面.写的很粗暴,用的凑合着.那时候看见云风前辈的一个开源的 cstring 串. 当时简单观摩了一下,觉得挺好的.也没细看.过了较长一段时间,想整合一下,将大字符串和云风的cstring 短简单的串合在一起变成一种.但是自己 认真复制了一遍后发现. 1.整合不了 云风(后面都省略前辈二字,觉得云风两个字,就已经帅的不行了)简单cstring.因为处理的领域不一样. 云风的 cstring => String , 而自己写的操作文

ContextImpl简单解析

ContextImpl是对Context的一个具体实现类,关键方法如下 1 static class ServiceFetcher { 2 int mContextCacheIndex = -1; 3 /** 4 * Main entrypoint; only override if you don't need caching. 5 */ 6 public Object getService(ContextImpl ctx) { 7 ArrayList<Object> cache = ctx

Java XML解析技术

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已.基本的解析方式有两种,一种叫SAX,另一种叫DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作.通过DOM接口,应用程

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

Java泛型解析(02):通配符限定

Java泛型解析(02):通配符限定 考虑一个这样的场景,计算数组中的最大元素. [code01] public class ArrayUtil { public static <T> T max(T[] array) { if (array == null || 0 == array.length) { return null ;} T max = array[0]; for (int i = 1; i < array.length; i++) { if (max.compareTo(

Java泛型解析(01):认识泛型

What Java从1.0版本到现在的8,中间Java5中发生了一个很重要的变化,那就是泛型机制的引入.Java5引入了泛型,主要还是为了满足在1999年指定的最早Java规范之一.经过了5年左右的时间,专家组定义了一套泛型规范,实现后通过测试投入到使用.所以说泛型是Java5以后才有的,欲知详情,继续往下看. Why      换个角度想,Java5引入泛型,必定是它能带来好处,否则牛气的Java专家工程师就要遭到吐槽了.我们来吐槽一下没有泛型的程序是怎么写的. [code01] ArrayL