Я пытаюсь смоделировать некоторые сценарии для API Vmware vSphere Vcenter SOAP (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-Instance) ивозможно, не стоит (мне не хватает эксперта по XML, чтобы судить), но спецификации https://www.w3.org/TR/REC-xml-names/#xmlReserved, кажется, ясно говорят, что это НЕ ДОЛЖНО рассматриваться как ошибка.
Любая идеяКак обойти (или исправить) эту проблему, можно только приветствовать.Огромное спасибо.