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了