Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 导入名称空间的Eclipse WSDL验证错误_Xml_Eclipse_Web Services_Xsd_Wsdl - Fatal编程技术网

Xml 导入名称空间的Eclipse WSDL验证错误

Xml 导入名称空间的Eclipse WSDL验证错误,xml,eclipse,web-services,xsd,wsdl,Xml,Eclipse,Web Services,Xsd,Wsdl,我从组织中的一个服务团队收到了一个非内联WSDL文件,在Eclipse中将他们的所有XSD添加到XML目录后,我发现他们的主WSDL文件没有验证。它似乎找不到中定义的元素。验证错误如下所示: fault元素正在引用未定义的消息“serviceFault”。检查消息名称和命名空间是否正确,以及消息是否已定义 在同一文件夹中,所有文件路径都是相对的。下面是一个重新创建验证错误的小测试示例: test.xsd <?xml version="1.0" encoding="UTF-8"?> &

我从组织中的一个服务团队收到了一个非内联WSDL文件,在Eclipse中将他们的所有XSD添加到XML目录后,我发现他们的主WSDL文件没有验证。它似乎找不到
中定义的
元素。验证错误如下所示:

fault元素正在引用未定义的消息“serviceFault”。检查消息名称和命名空间是否正确,以及消息是否已定义

在同一文件夹中,所有文件路径都是相对的。下面是一个重新创建验证错误的小测试示例:

test.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema 
    targetNamespace="http://www.example.org/test" xmlns="http://www.example.org/test"
    elementFormDefault="qualified" attributeFormDefault="unqualified"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions">

    <xsd:complexType name="ServiceFaultType">
        <xsd:sequence>
            <xsd:element name="code" type="xsd:string" />
            <xsd:element name="message" type="xsd:string" />
            <xsd:element minOccurs="0" name="detail" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element ibmSchExtn:docRoot="true" name="serviceFault"
        type="ServiceFaultType" />
</xsd:schema>

common.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="http://www.example.org/test" xmlns="http://www.example.org/test"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:documentation>
        <wsdl:appinfo source="WMQI_APPINFO">
            <MRWSDLAppInfo xmlns="urn:xxx.xxx.xxxbank.com/common/service"
                imported="true" />
        </wsdl:appinfo>
    </wsdl:documentation>
    <wsdl:types>
        <xs:schema elementFormDefault="qualified">
            <xs:import namespace="http://www.example.org/test"
                schemaLocation="test.xsd" />
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="serviceFault">
        <wsdl:part element="serviceFault" name="fault" />
    </wsdl:message>
</wsdl:definitions>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="urn:testservice" xmlns="urn:testservice"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:ns="http://www.example.org/test"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">


    <wsdl:import namespace="http://www.example.org/test" location="common.wsdl"></wsdl:import>
    <wsdl:types>
        <xsd:schema targetNamespace="urn:testservice">
            <xsd:element name="NewOperation">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="in" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="NewOperationResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="out" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="NewOperationRequest">
        <wsdl:part element="NewOperation" name="parameters" />
    </wsdl:message>
    <wsdl:message name="NewOperationResponse">
        <wsdl:part element="NewOperationResponse" name="parameters" />
    </wsdl:message>
    <wsdl:portType name="test">
        <wsdl:operation name="NewOperation">
            <wsdl:input message="NewOperationRequest" />
            <wsdl:output message="NewOperationResponse" />
            <wsdl:fault message="ns:serviceFault" name="fault" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="testSOAP" type="test">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="NewOperation">
            <soap:operation soapAction="http://www.example.org/test/NewOperation" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="test">
        <wsdl:port binding="testSOAP" name="testSOAP">
            <soap:address location="http://www.example.org/" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

test.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="http://www.example.org/test" xmlns="http://www.example.org/test"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:documentation>
        <wsdl:appinfo source="WMQI_APPINFO">
            <MRWSDLAppInfo xmlns="urn:xxx.xxx.xxxbank.com/common/service"
                imported="true" />
        </wsdl:appinfo>
    </wsdl:documentation>
    <wsdl:types>
        <xs:schema elementFormDefault="qualified">
            <xs:import namespace="http://www.example.org/test"
                schemaLocation="test.xsd" />
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="serviceFault">
        <wsdl:part element="serviceFault" name="fault" />
    </wsdl:message>
</wsdl:definitions>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="urn:testservice" xmlns="urn:testservice"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:ns="http://www.example.org/test"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">


    <wsdl:import namespace="http://www.example.org/test" location="common.wsdl"></wsdl:import>
    <wsdl:types>
        <xsd:schema targetNamespace="urn:testservice">
            <xsd:element name="NewOperation">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="in" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="NewOperationResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="out" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="NewOperationRequest">
        <wsdl:part element="NewOperation" name="parameters" />
    </wsdl:message>
    <wsdl:message name="NewOperationResponse">
        <wsdl:part element="NewOperationResponse" name="parameters" />
    </wsdl:message>
    <wsdl:portType name="test">
        <wsdl:operation name="NewOperation">
            <wsdl:input message="NewOperationRequest" />
            <wsdl:output message="NewOperationResponse" />
            <wsdl:fault message="ns:serviceFault" name="fault" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="testSOAP" type="test">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="NewOperation">
            <soap:operation soapAction="http://www.example.org/test/NewOperation" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="test">
        <wsdl:port binding="testSOAP" name="testSOAP">
            <soap:address location="http://www.example.org/" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

如果在Eclipse中将test.xsd添加到XML目录中,则会显示验证错误。他们坚持认为他们的wsdl或模式没有问题,JAX-WS似乎可以通过wsimport生成代理。此外,在与端点通信时,它似乎可以很好地封送和取消封送请求和响应

这可能是Eclipse的WSDL验证中的错误吗


编辑:只是一个想法,尽管我还没有解决这个问题。我认为可能发生的事情是Eclipse正在验证命名空间以
test.xsd
,但在该命名空间中还有
common.wsdl
,它声明了自己的元素。当Eclipse在ns名称空间中查找这个公共的
ns:serviceFault
时,它显然不会在
test.xsd
中找到它。这让我觉得EclipseWSDL验证在这里应该更智能一些,可以识别WSDL导入并包括其中的所有内容,以及在其XML目录中声明的模式。如果我在这里是正确的,我仍然不知道如何解决它。Eclipse是否有一个功能可以真正正确地验证这种类型的WSDL情况?

我自己创建了文件,并使用Eclipse Luna 4.4.0和
Web Developer Tools 3.2.5
进行了测试。我将两个
.wsdl
文件放在同一个通用项目中,然后通过向导将
.xsd
导入XML目录中

当我验证每个文件时,Eclipse没有发现任何错误/警告。只有当我从项目中删除了
common.wsdl
文件时,我才收到您引用的错误消息,但这是意料之中的,因为它是在
test.wsdl
中导入的。我还尝试在
SOAPUI5.0.0
中使用test.wsdl(来自Eclipse目录)创建一个新的SoapUI项目,它也没有抱怨

由于我无法重现这个错误,我认为它很可能是您正在使用的特定Eclipse版本的错误,或者是Web开发人员工具的错误。或者可能是一些当地的胡说八道,一眼就看不出来。再次确保Eclipse实际上将所有文件物理地放在文件系统的同一目录中

如果您决定更改版本,请参阅我的Eclipse配置清单,以便进行比较

我很高兴能够进一步帮助您,但至少我向您确认了该问题是本地问题。祝你好运


在评论1后更新1

最初,我通过Import->XML->XML目录导入了
test.xsd
。现在,我将
.xsd
移动到另一个文件系统位置,并将其从项目中删除(因为否则它总是有效的)。然后,我按照您的建议做了(窗口->首选项->XML->XML目录->用户指定的条目->目录条目->从文件系统键类型=尝试了命名空间名称架构位置
http://www.example.org/test
)。执行此操作后,我在读取.xsd文件(指向项目的本地目录而不是新位置)时收到警告
错误和多个错误,其中一个是您的错误

如果我删除
common.wsdl
中的
schemaLocation=“test.xsd”
属性,并且
keytype
设置为
Namespace
,那么
common.wsdl
工作并且没有错误,但是
test.wsdl
说明:

fault元素正在引用未定义的消息“serviceFault”。检查消息名称和命名空间是否正确,以及消息是否已定义

我看到common.wsdl有两个名称空间具有相同的名称空间:
xs
xsd
(“”)。这可能是导致错误的原因吗

更新2

我进一步研究发现,解释如何使用XML目录和模式。根据它的说法,这种行为在某种程度上是意料之中的:


注意:如果您的XML文档指定了相对模式位置(例如下面显示的“foo.xsd”),则不能使用“foo.xsd”作为模式位置键注册XML模式。TODO:下面的参考部分描述了为什么会出现这种情况,以及XMLCatalogV1.1如何提供部分解决此问题的方法<代码>感谢您对此进行调查。您是否记得添加
test.xsd
fi