同様のトピックや例を読んだことがありますが、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 の org.exolab.castor.xml.schema.Schema.getComplexType(Schema.java:951) で「tns:cEstado」が認識されない名前空間プレフィックス.xml.schema.TypeReference.resolveTypeReference(TypeReference.java:122) at org.exolab.castor.xml.schema.TypeReference.getType(TypeReference.java:71) at 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>
どんな助けでも大歓迎です..
ありがとう