SOAPUI SOAP嘲讽错误:XMLSchema的实例:前缀不能以XML开始

问题描述 投票:0回答:1

我试图嘲弄面向VMware vSphere的vCenter SOAP API(VMware的vSphereSDK-6.5.0这里下载:https://my.vmware.com/web/vmware/details?productId=614&downloadGroup=VS-MGMT-SDK65)的一些场景。

我可以嘲笑几个API操作,直到我遇到了一个问题,因为WSDL是指由于下面的语句显然产生一个错误命名空间:

<selectSet XMLSchema-instance:type="TraversalSpec" xmlns:XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance">

这里是抛出异常

ERROR:com.eviware.soapui.impl.wsdl.mock.DispatchException:   org.apache.xmlbeans.XmlException: error: Prefix can't begin with XML: XMLSchema-instance
   com.eviware.soapui.impl.wsdl.mock.DispatchException: org.apache.xmlbeans.XmlException: error: Prefix can't begin with XML: XMLSchema-instance
at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchPostRequest(WsdlMockDispatcher.java:242)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchRequest(WsdlMockDispatcher.java:114)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockRunner.dispatchRequest(WsdlMockRunner.java:144)
at com.eviware.soapui.monitor.JettyMockEngine$ServerHandler.handle(JettyMockEngine.java:604)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.xmlbeans.XmlException: error: Prefix can't begin with XML: XMLSchema-instance
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3474)
at org.apache.xmlbeans.impl.store.Locale.parse(Locale.java:712)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:696)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:683)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:208)
at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:633)
at com.eviware.soapui.support.xml.XmlUtils.createXmlObject(XmlUtils.java:183)
at com.eviware.soapui.impl.support.AbstractMockRequest.getRequestXmlObject(AbstractMockRequest.java:297)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchPostRequest(WsdlMockDispatcher.java:193)
... 16 more

下面是API的上SOAP UI失败(显然vSphere上运行),该操作请求的全身:

'<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
    <RetrieveProperties xmlns="urn:vim25">
        <_this type="PropertyCollector">propertyCollector</_this>
        <specSet>
            <propSet>
                <type>Folder</type>
                <pathSet>name</pathSet>
                <pathSet>childType</pathSet>
            </propSet>
            <propSet>
                <type>Datacenter</type>
                <pathSet>name</pathSet>
            </propSet>
            <propSet>
                <type>VirtualMachine</type>
                <pathSet>name</pathSet>
            </propSet>
            <propSet>
                <type>Network</type>
                <pathSet>name</pathSet>
            </propSet>
            <propSet>
                <type>ComputeResource</type>
                <pathSet>name</pathSet>
                <pathSet>resourcePool</pathSet>
            </propSet>
            <propSet>
                <type>ClusterComputeResource</type>
                <pathSet>name</pathSet>
                <pathSet>resourcePool</pathSet>
            </propSet>
            <propSet>
                <type>Datastore</type>
                <pathSet>name</pathSet>
            </propSet>
            <objectSet>
                <obj type="Folder">group-d1</obj>
                <skip>true</skip>
                <selectSet XMLSchema-instance:type="TraversalSpec" xmlns:XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance">
                    <type>Folder</type>
                    <path>childEntity</path>
                    <skip>false</skip>
                </selectSet>
            </objectSet>
        </specSet>
    </RetrieveProperties>
</Body>

我的看法是,这是关系到检查XML命名空间的语法是否正确XML规范其进行了讨论,显然固定在错误报告(在JDOM上下文)的解释:https://github.com/hunterhacker/jdom/issues/126

事实上,在他们的API,VMware的乡亲指开始XML(XMLSchema的实例)命名空间,也许不应该(我没有足够的XML专家判断),但似乎https://www.w3.org/TR/REC-xml-names/#xmlReserved的规格,以克利里说,这不应被视为作为一个错误。

如何绕过(或修复)这个问题的任何想法是值得欢迎的。多谢。

xml unit-testing soap soapui vmware
1个回答
0
投票

在XML命名空间建议的第一版只是说,启动“XML”前缀被保留用于未来的规范使用;它并没有说,如果遇到这样的前缀解析器应该做的事情。

有些产品通过拒绝含有这种前缀的文件解释规则。这将混淆保留他们的意图,因为如果任何新标准采用了这样一个名字,用这个名字的文件不会与旧的软件工作。所以在XML命名空间的第二版,它澄清了这些规则意味着:应用程序不应该使用这样的名称,但解析器不应该拒绝他们。

但是,当然,这是为时已晚;软件已经在那里与规则不同的解释,而一些尚未更新。

如何解决这个问题呢?你要么必须更改文档,或更改该软件。我会尝试把文件通过XSLT转换改变的前缀。

© www.soinside.com 2019 - 2024. All rights reserved.