Анализатор предиката wsdl, кажется, останавливается после открытия включения файла wsd. Включение находится внутри раздела типов.
import com.predic8.wsdl.*; //This is the XML-parser I am using
Я вижу это, потому что это работает, когда я помещаю раздел типов в конец документа wsdl:
<wsdl:definitions xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/" xmlns:sch = "com.xxxsys.webservices" xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns = "com.xxxsys.webservices" targetNamespace = "com.xxxsys.webservices">
<wsdl:message name = "createMandateResponse">
<wsdl:part element = "tns:createMandateResponse" name = "parameters"/>
</wsdl:message>
<wsdl:message name = "createMandateRequest">
<wsdl:part element = "tns:createMandate" name = "parameters"/>
</wsdl:message>
<wsdl:message name = "checkMandateResponse">
<wsdl:part element = "tns:checkMandateResponse" name = "parameters"/>
</wsdl:message>
<wsdl:message name = "checkMandateRequest">
<wsdl:part element = "tns:checkMandate" name = "parameters"/>
</wsdl:message>
<wsdl:message name = "availableResponse">
<wsdl:part element = "tns:availableResponse" name = "parameters"/>
</wsdl:message>
<wsdl:message name = "availableRequest">
<wsdl:part element = "tns:available" name = "parameters"/>
</wsdl:message>
<!--
<wsdl:message name = "GeneralFault">
<wsdl:part element = "tns:GeneralFault" name = "fault"/>
</wsdl:message>
-->
<wsdl:portType name = "DMSPort">
<wsdl:operation name = "createMandate">
<wsdl:input message = "tns:createMandateRequest" name = "createMandateRequest" />
<wsdl:output message = "tns:createMandateResponse" name = "createMandateResponse"/>
<!--<wsdl:fault message = "tns:GeneralFault" name = "GeneralFault" />-->
</wsdl:operation>
<wsdl:operation name = "checkMandate">
<wsdl:input message = "tns:checkMandateRequest" name = "checkMandateRequest" />
<wsdl:output message = "tns:checkMandateResponse" name = "checkMandateResponse"/>
<!--<wsdl:fault message = "tns:GeneralFault" name = "GeneralFault" />-->
</wsdl:operation>
<wsdl:operation name = "available">
<wsdl:input message = "tns:availableRequest" name = "availableRequest" />
<wsdl:output message = "tns:availableResponse" name = "availableResponse"/>
<!--<wsdl:fault message = "tns:GeneralFault" name = "GeneralFault" />-->
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name = "DMSPortSoap11" type = "tns:DMSPort">
<soap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name = "createMandate">
<soap:operation soapAction = ""/>
<wsdl:input name = "createMandateRequest">
<soap:body use = "literal"/>
</wsdl:input>
<wsdl:output name = "createMandateResponse">
<soap:body use = "literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name = "checkMandate">
<soap:operation soapAction = ""/>
<wsdl:input name = "checkMandateRequest">
<soap:body use = "literal"/>
</wsdl:input>
<wsdl:output name = "checkMandateResponse">
<soap:body use = "literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name = "available">
<soap:operation soapAction = ""/>
<wsdl:input name = "availableRequest">
<soap:body use = "literal"/>
</wsdl:input>
<wsdl:output name = "availableResponse">
<soap:body use = "literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name = "DMSService">
<wsdl:port binding = "tns:DMSPortSoap11" name = "DMSPortSoap11">
<soap:address location = "http://localhost:8481/ws"/>
</wsdl:port>
</wsdl:service>
<wsdl:types>
<!-- <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">-->
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" xmlns:tns = "com.xxxsys.webservices">
<!-- <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" xmlns:tns = "com.xxxsys.webservices" targetNamespace = "com.xxxsys.webservices" elementFormDefault = "qualified">-->
<!-- <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" elementFormDefault = "qualified" targetNamespace = "com.xxxsys.webservices">-->
<include schemaLocation = "DMS.xsd"/>
<!--<import namespace = "com.xxxsys.webservices" schemaLocation = "DMS.xsd"/>-->
</xs:schema>
</wsdl:types>
Файл xsd выглядит так:
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" xmlns:tns = "com.xxxsys.webservices"
targetNamespace = "com.xxxsys.webservices" elementFormDefault = "qualified">
<xs:element name = "createMandate">
<xs:complexType>
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "birthdate" type = "xs:date"/>
<xs:element name = "iban" type = "xs:string"/>
<xs:element name = "bic" type = "xs:string"/>
<xs:element name = "newcustomer" type = "xs:boolean"/>
<xs:element name = "templateid" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "createMandateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name = "mandatestatus" type = "xs:string"/>
<xs:element name = "mandateid" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "checkMandate">
<xs:complexType>
<xs:sequence>
<xs:element name = "mandateid" type = "xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "checkMandateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name = "mandatestatus" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "available">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "availableResponse">
<xs:complexType>
<xs:sequence>
<xs:element name = "isAvailable" type = "xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "GeneralFault">
<xs:complexType>
<xs:sequence>
<xs:element name = "message" type = "xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Я хотел бы иметь возможность обрабатывать файлы wsdl, в которых есть раздел типов с включением вверху. И таким образом измените файл wsdl обратно, чтобы он был нормальным.
Я только что выяснил, просмотрев другой вопрос, что это должно быть <xs: include schemaLocation = "DMS.xsd" /> Теперь все работает, как ожидалось.
См. Также переполнение стека