Как настроить схему, встроенную в импортированный WSDL - PullRequest
5 голосов
/ 30 июня 2011

У меня есть a.wsdl & b.wsdl, где a.wsdl импортирует b.wsdl.Теперь мне нужно настроить схему внутри b.wsdl, используя wsimport и JAXB.но при использовании ниже настройка дает ошибку, что "Оценка XPath" wsdl: определения / wsdl: types / xsd: schema [@ targetNamespace = 'b'] "приводит к пустому целевому узлу

Я не могу найти способ настроить встроенную схему в импортированном b.wsdl при генерации клиентского кода с помощью wsimport.

    <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='b']"
               xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
               xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                   <jaxb:globalBindings>
                    <jaxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime" 
                    parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
                    printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
               </jaxb:globalBindings>
   </jaxws:bindings>

A.wsdl

<definitions targetNamespace="a"
 xmlns="http://schemas.xmlsoap.org/wsdl/"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:interface="b">
 <import location="b.wsdl" namespace="b"/>
  <service name="Service">
   <port binding="interface:Binding" name="Port">
      <soap:address location="https://localhost/sdk/vpxdService" />
   </port>
  </service>
</definitions>

B.wsdl

<definitions targetNamespace="b"
 xmlns="http://schemas.xmlsoap.org/wsdl/"
 xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:b="b"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <types>
   <schema
     targetNamespace="b"
     xmlns="http://www.w3.org/2001/XMLSchema"
     xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
     xmlns:b="b"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     elementFormDefault="qualified">
     <complexType name="XYZ">
        <sequence>
           <element name="dynamicType" type="xsd:string" minOccurs="0" />
           <element name="val" type="xsd:anyType" maxOccurs="unbounded" />
        </sequence>
     </complexType>
  </types>
 </schema>
</definitions>

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

После просмотра данного веб-сайта я изменил внешний файл привязки для использования wsdlLocation = "b.wsdl" вместо node = "wsdl: определения / wsdl: types / xsd: schema [@ targetNamespace = 'b'] ", которая сделала магию .

Это гарантирует, что встроенная схема, определенная в WSDL, будет настроена в соответствии с требованиями.

<bindings 
 xmlns="http://java.sun.com/xml/ns/jaxb"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl"
 version="2.0">    
  <bindings wsdlLocation="b.wsdl">
    <globalBindings>
      <javaType name="java.util.Calendar" xmlType="xsd:dateTime"
        parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
        printMethod="javax.xml.bind.DatatypeConverter.printDate"
      />
     </globalBindings>  
  </bindings>
</bindings>

http://fusesource.com/docs/framework/2.1/jaxws/JAXWSCustomTypeMappingOverview.html

0 голосов
/ 30 июня 2011

Вы пытались добавить следующие атрибуты к элементу <jaxws:bindings>?

 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

и

 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

Вы ссылаетесь на пространства имен xsd и wsdl в выражении xpath, но пока вы не определите для них URI, они не будут совпадать с URI в целевых документах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...