Using JAXB episode files with wsimport

There are two WSDLs that use some of the schemas they use to define their data types. Below is an example of one of the WSDLs:

<wsdl:definitions
    name="FooService"
    targetNamespace="http://xmlns.my.org/services/FooService/v001"
    xmlns:srv="http://xmlns.my.org/services/FooService/v001"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:fault="java:org.my.exception"
    ...
>
    <wsdl:types>
        <xsd:schema>
            <xsd:import namespace="java:org.my.exception" schemaLocation="../xsd/common/BusinessException.xsd"/>
            <xsd:import namespace="http://xmlns.my.org/services/FooServiceMessages/v001" schemaLocation="../xsd/fooservice/FooServiceMessages_v001.xsd"/>
        </xsd:schema>
    </wsdl:types>
    ...
    <wsdl:message name="BusinessException">
        <wsdl:part element="fault:BusinessException" name="BusinessException"/>
    </wsdl:message>
    ...
    <wsdl:portType name="IFooService">
        <wsdl:operation name="getItems">
            ...
            <wsdl:fault message="srv:BusinessException" name="BusinessException"/>
        </wsdl:operation>
        ...
    </wsdl:portType>
    ...
</wsdl:definitions>

      

BusinessException.xsd

is one of the general schemes.

I am trying to generate Java code with these WSDLs using wsimport

. It would be prudent to compile the shared schemas separately from WSDLd, and then reuse the classes derived from those schemas when compiling the WSDL. To do this, I created a JAXB episode file along with generic Java code:

<bindings version="2.1" xmlns="http://java.sun.com/xml/ns/jaxb">
  <bindings scd="x-schema::tns" xmlns:tns="java:org.my.exception">
    <schemaBindings map="false">
      <package name="org.my.integration.dto.common"/>
    </schemaBindings>
    <bindings scd="~tns:BusinessException">
      <class ref="org.my.integration.dto.common.BusinessException"/>
    </bindings>
  </bindings>
  <bindings scd="x-schema::tns" xmlns:tns="http://xmlns.my.org/BaseIdentifiers/v001">
    <schemaBindings map="false">
      <package name="org.my.integration.dto.common"/>
    </schemaBindings>
    <bindings scd="~tns:EntityIdentifierListType">
      <class ref="org.my.integration.dto.common.EntityIdentifierListType"/>
    </bindings>
    <bindings scd="~tns:...">
      <class ref="..."/>
    </bindings>
    ...
  </bindings>
</bindings>

      

Namespace

http://xmlns.my.org/BaseIdentifiers/v001

filled with another common schema imported in FooServiceMessages_v001.xsd

(actually in schema imported in schema that ... imported in FooServiceMessages_v001.xsd

).

Here is the wsimport call I use to generate my Java code:

wsimport -B-XautoNameResolution -Xnocompile -s ./../java/ -verbose -b ./bindings/fooservice/jaxws-bindings.xml -b ./bindings/fooservice/jaxb-bindings.xml -b ./bindings/common/common.episode -keep ./wsdl/FooService_v001.wsdl

      

This call produces the following error:

[ERROR] Schema descriptor {java:org.my.exception}BusinessException in message part "BusinessException" is not defined and could not be bound to Java. ...

      

BTW, if the binding for BusinessException.xsd

is described in a regular external JAXB binding file (not in the episode file) everything works fine. It looks like it wsimport

has some problems with the processing of sequence files that describe bindings for schemas that are imported directly into WSDL.

Is there a way to use sequence files from wsimport

for diagrams directly imported into WSDL (for example BusinessException.xsd

in my case)?

+3


source to share


1 answer


It seems to be some kind of bug or wsimport misbehavior. Apache CXF wsdl2java tool does not have this problem.



0


source







All Articles