2

我已经阅读了类似的主题和示例,但是在从 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>

任何帮助将不胜感激..

谢谢

4

0 回答 0