我已经阅读了类似的主题和示例,但是在从 WSDL 获取具有复杂类型的 WSDL 模式内容方面仍然存在一些问题。
我正在使用 WSDL4J、Castor 和 JDOM 库。
org.exolab.castor.xml.schema.Schema castorSchema = null ;
if(theWSDL.getTypes() !=null && theWSDL.getTypes().getExtensibilityElements() !=null){
for (Object e : theWSDL.getTypes().getExtensibilityElements()) {
schema = (Schema)e;
}
}
if (schema != null) {
DOMBuilder domBuilder = new DOMBuilder();
Element jdomSchemaElement = domBuilder.build(schema.getElement());
XMLOutputter outputter = new XMLOutputter();
String xmlout = outputter.outputString(jdomSchemaElement.getDocument());
StringReader in2 = new StringReader(xmlout);
InputSource schemaSource = new InputSource(in2);
SchemaReader schemaReader;
try {
schemaReader = new SchemaReader(schemaSource);
castorSchema= schemaReader.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
此代码适用于某些 WSDL 文件,但对于某些 WSDL 文件,我在行“castorSchema=schemaReader.read();”中收到此错误:
线程“主”java.lang.IllegalArgumentException 中的异常:getComplexType:在 org.exolab.castor.xml.schema.Schema.getComplexType(Schema.java:951) 的 org.exolab.castor 中无法识别命名空间前缀“tns:cEstado” .xml.schema.TypeReference.resolveTypeReference(TypeReference.java:122) 在 org.exolab.castor.xml.schema.TypeReference.getType(TypeReference.java:71) 在 org.exolab.castor.xml.schema.ElementDecl.getType (ElementDecl.java:349) 在 org.exolab.castor.xml.schema.ElementDecl.validate(ElementDecl.java:809) 在 org.exolab.castor.xml.schema.Group.validate(Group.java:463) 在org.exolab.castor.xml.schema.ComplexType.validate(ComplexType.java:815) 在 org.exolab.castor.xml.schema.Schema.validate(Schema.java:2206) 在 org.exolab.castor.xml。 schema.reader.SchemaReader.read(SchemaReader.java:261) 在 network.WSNetwork.execute(WSNetwork.java:105) 在 network.WSNetwork.main(WSNetwork.java:61)
关于模式中复杂类型的 wsdl 文件部分:
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="getestadosResult" type="tns:ArrayOfCEstado" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfCEstado">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="cEstado" nillable="true" type="tns:cEstado" />
</s:sequence>
</s:complexType>
<s:complexType name="cEstado">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="IdEstado" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Estado" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Err" type="s:string" />
</s:sequence>
</s:complexType>
任何帮助将不胜感激..
谢谢