用WSDL4J解析types標簽中的內容


WSDL4J是一種用來解析WSDL文本的常用工具。

但網絡上用WSDL4J來解析wsdl文檔complexType標簽中內容的問題一大堆也沒有有效的解決方法。今天在我“遍歷”wsdl4j的api文檔和網絡資源后找到一種通用的解決方案,試了一下成功了。
首先我參考了http://hi.baidu.com/wxmsona/blog/item/39b93444ee34842dcefca34c.html的解決方案。但這種解決方案不是我要找的通用的解決方案,因為這種方案在用DOM解析時用getElementsByTagName方法時是默認TagName屬性已知,如complexType或s:complexType等等。所以,我必須要找到能獲取types標簽中子標簽的Prefix的方法,再接上標簽名,如Prefix為"xs”,則解析時調用getElementsByTagName方法時就應該是getElementsByTagName(Prefix+":complexType")這樣了。關鍵是怎樣獲取Prefix。其實最簡單的方法是用解析字符串的方式獲取,但感覺不規范,這里就不羅嗦了。下面進入正題。

首先,以下一些處理是必不可少的:
WSDLFactory factory = WSDLFactory.newInstance();
WSDLReader reader = factory.newWSDLReader();
reader.setFeature("javax.wsdl.verbose", true);
reader.setFeature("javax.wsdl.importDocuments", true);
Definition def = reader.readWSDL("complex1.wsdl");
WSDLWriter writer = factory.newWSDLWriter();
Document doc = writer.getDocument(def);

// 獲取types
Types types = def.getTypes();
// 若types內容為空則不查找complexType
if(types==null){
     return ;
}

List list = types.getExtensibilityElements();
// 默認types標簽中只包含一個直接子標簽
ExtensibilityElement extensibilityElement = (ExtensibilityElement)list.get(0);
Schema schema = (Schema)extensibilityElement;   
String prefix = schema.getElement().getPrefix();

到這里就獲取了prefix了,其余的就可以直接參考http://hi.baidu.com/wxmsona/blog/item/39b93444ee34842dcefca34c.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM