-
1 # CoreCode
-
2 # CoreCode
一個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 - 特定埠型別的具體協議和資料格式規範的繫結。 (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()); } } } }
回覆列表
一個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 - 特定埠型別的具體協議和資料格式規範的繫結。 (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()); } } } }