相对而言。Eclipse API中国的数据是比较小的。但Eclipse的API提供了许多的。非常强大。

实例,eclipse的Eclipse API 提供 org.eclipse.wst.wsdl包裹,它提供了大量的类来解决WSDL档。

。其提供的API简单易懂。并且其API是和专业术语相应起来的,比方,

一个WSDL文档通常包括7个重要的元素。即types、import、message、portType、operation、binding、 service元素。

这些元素嵌套在definitions元素中,

(1) Definitions是WSDL文档的根元素。相应于这个类: org.eclipse.wst.wsdl.Definition 其它的对象都能够通过这个对象获得

(2) Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。

(3) Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 

(4) PortType - 对于某个訪问入口点类型所支持的操作的抽象集合。这些操作能够由一个或多个服务訪问点来支持。

 (子节点) Operation - 对服务中所支持的操作的抽象描写叙述。一般单个Operation描写叙述了一个訪问入口的请求/响应消息对。

(5) Binding - 特定port类型的详细协议和数据格式规范的绑定。

(6) Service- 相关服务訪问点的集合。

(子节点) Port - 定义为协议/数据格式绑定与详细Web訪问地址组合的单个服务訪问点。

以下是代码实例:

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import javax.wsdl.Message;
import javax.wsdl.Part;
import javax.wsdl.PortType;
import javax.xml.namespace.QName; import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.Types;
import org.eclipse.wst.wsdl.internal.impl.PartImpl;
import org.eclipse.wst.wsdl.internal.util.WSDLResourceFactoryImpl;
import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.util.XSDResourceImpl;
import org.junit.Test;
import org.junit.Before; public class WSDLParserWithEclipse {
Definition definition=null;
String wsdlPathString="E:/HelloEclipse-EMF-WSDL-XSD/test.wsdl"; @Before
public void setup(){
ResourceSet resourceSet = new ResourceSetImpl();
Resource.Factory.Registry registry = resourceSet.getResourceFactoryRegistry();
Map extensionToFactoryMap = registry.getExtensionToFactoryMap();
extensionToFactoryMap.put("wsdl", new WSDLResourceFactoryImpl());
File wsdlFile =new File(wsdlPathString);
URI uri = URI.createFileURI(wsdlFile.getAbsolutePath());
// You can avoid this cast, but will have to cast anyway later to get the Definition out the resource contents
WSDLResourceImpl wsdlResource = (WSDLResourceImpl) resourceSet.createResource(uri);
try {
wsdlResource.load(null);
definition = wsdlResource.getDefinition();
}catch(Exception e){
e.printStackTrace();
}
} @Test
public void testTypes(){
Types types = definition.getETypes();
List schemas = types.getSchemas("http://www.xxxxx.com/problem");
XSDSchema schema = (XSDSchema) schemas.get(0);
org.eclipse.xsd.util.XSDResourceImpl.serialize(System.out, schema.getElement());
} @Test
public void testMessage(){
Map messages=definition.getMessages();
System.out.println("The message size is:"+messages.size());
Set setMessages=messages.keySet();
Iterator iteratorMessages=setMessages.iterator();
while(iteratorMessages.hasNext()){
QName key=(QName)iteratorMessages.next();
Message message=(Message)messages.get(key);
//{http://www.xxxxx.com/problem}getKeysSoapIn
//System.out.println("Message Name:"+message.getQName());
if(message.getQName().toString().indexOf("getKeysSoapIn")>0){
System.out.println("Message Name:"+message.getQName());
Map partsMap=message.getParts();
//org.eclipse.xsd.impl.XSDElementDeclarationImpl
System.out.println("Message Part size for getKeysSoapIn message is:"+partsMap.size());
PartImpl part= (PartImpl)partsMap.get("problem");
XSDElementDeclaration xsdElementDeclaration=part.getElementDeclaration();
XSDResourceImpl.serialize(System.out, xsdElementDeclaration.getElement());
}
}
}
@Test
public void testPortType(){
Map portTypes=definition.getPortTypes();
System.out.println("Port Type size:"+portTypes.size());
if(portTypes!=null&&portTypes.size()>0){
Set set=portTypes.keySet();
Iterator iterator=set.iterator();
while(iterator.hasNext()){
QName object=(QName)iterator.next();
PortType portType=(PortType)portTypes.get(object);
System.out.println("Port Type name:"+portType.getQName());
org.eclipse.xsd.util.XSDResourceImpl.serialize(System.out, portType.getDocumentationElement());
}
}
} }

版权声明:本文博主原创文章,博客,未经同意不得转载。

最新文章

  1. leetcode 173. Binary Search Tree Iterator
  2. 关于C#中的new的用法
  3. Windows xp IIS显示403错误解决方案
  4. Java多线程 wait, notify 和 notifyAll
  5. Spark on Mesos部署
  6. window下安装nodejs
  7. BZOJ 2152: 聪聪可可 点分治
  8. Apache中RewriteCond规则参数介绍(转)
  9. MySQL只恢复某个库或某张表
  10. POJ 2449 Dijstra + A* K短路
  11. Codeforces 842B Gleb And Pizza【几何,水】
  12. Asp.Net Core 轻松学-多线程之取消令牌
  13. 无法在Application Designer中打开PeopleTools对象
  14. 距离不是一个连续的物理量(Distance is not a continuous physical quantity)
  15. 【转】简单的解释XSS攻击
  16. Brainfuck解析器(Python)
  17. web前端性能调优(一)
  18. bzoj4940: [Ynoi2016]这是我自己的发明
  19. java入门简介
  20. 为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用

热门文章

  1. Android中的动画具体解释系列【4】——Activity之间切换动画
  2. scala akka 修炼之路5(scala特质应用场景分析)
  3. zoj3329(概率dp)
  4. 【iOS开发】 常遇到的Crash和Bug处理
  5. C#操作Cookie
  6. 一个有趣的swap函数
  7. Ubuntu 使用中的问题总结
  8. [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
  9. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现
  10. DotNet基础