Skip to content

Try to use jaxb2-basics-annotate to annotate a class with lombok ToString annotation #709

@ahoehma

Description

@ahoehma

My maven plugin config:

<plugin>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>4.0.3</version>
    <configuration>
      <catalog>${basedir}/src/wsdl/catalog.xml</catalog>
      <sourceDestDir>${project.build.directory}/generated-sources/jaxws/</sourceDestDir>
      <verbose>true</verbose>
    </configuration>
    <executions>
      <execution>
        <id>cadservice</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>wsimport</goal>
        </goals>
        <configuration>
          <bindingFiles>
             <!-- XXX: I would like to annotate types in this schema ... -->
            <bindingFile>jaxb-xxxx_com_spice_cad_types.xml</bindingFile>
          </bindingFiles>
          <wsdlFiles>
            <wsdlFile>cad.wsdl</wsdlFile>
          </wsdlFiles>
          <wsdlLocation>cad.wsdl</wsdlLocation>
          <staleFile>${project.build.directory}/jaxws-stale/cad.stale</staleFile>
          <xjcArgs>
            <xjcArg>-Xannotate</xjcArg>
          </xjcArgs>
          <extension>true</extension>
        </configuration>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-annotate</artifactId>
        <version>${jaxb2-basics-annotate.version}</version>
      </dependency>
      <dependency>
        <!-- only neeed for the pretty old javax.xml jaxb2-basics-annotate extension -->
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>
      <dependency>
        <!-- only to get rid of slf4j warnings of missing logger implementation during jaxws plugin runs -->
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
      </dependency>
    </dependencies>
  </plugin>

My catalog.xml looks like this:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
  <public publicId="http://spice.xxxx.com/cad/types" uri="com.xxxx.spice.cad.types.xsd" />
</catalog>

My bindingFile jaxb-xxxx_com_spice_cad_types.xml looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings jaxb:version="3.0"
               xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:cad="http://spice.xxxx.com/cad/types"
               xmlns:annox="http://annox.dev.java.net"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
               jaxb:extensionBindingPrefixes="xjc annox">
  <jaxb:bindings scd="/x-schema::cad">
    <jaxb:schemaBindings>
      <jaxb:package name="com.xxxx.spice.webservice.goos.cad" />
    </jaxb:schemaBindings>
    <!-- Not working -->
    <!--<jaxb:bindings node="cad:complexType[@name='ParameterType']">-->
    <jaxb:bindings scd="type::cad:ParameterType">
      <annox:annotateClass>
        @java.lang.SuppressWarnings("all")
        @lombok.ToString
      </annox:annotateClass>
    </jaxb:bindings>
  </jaxb:bindings>
</jaxb:bindings>

And my com.xxxx.spice.cad.types.xsd looks like this (i show only the relevant lines):

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="http://spice.xxxx.com/cad/types"
            xmlns="http://spice.xxxx.com/cad/types"
            elementFormDefault="qualified"
            targetNamespace="http://spice.xxxx.com/cad/types">

....

  <xsd:complexType name="ParameterType">
    <xsd:sequence>
      <xsd:element maxOccurs="1" minOccurs="1" name="target" type="tns:ParameterTargetType">
        <xsd:annotation>
          <xsd:documentation>The parameter target (param/textparam).</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element maxOccurs="1" minOccurs="1" name="name" type="notEmptyString">
        <xsd:annotation>
          <xsd:documentation>The parameter name.</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element maxOccurs="1" minOccurs="1" name="value" type="notEmptyString">
        <xsd:annotation>
          <xsd:documentation>The parameter value.</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

....

</xsd:schema>

And my cad.wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="CadWebservice"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:sst="http://spice.xxxx.com/cad/types"
                  xmlns:tns="http://spice.xxxx.com/cad/"
                  targetNamespace="http://spice.xxxx.com/cad/">
  <!-- Types -->
  <wsdl:types>
    <xsd:schema>
      <xsd:import namespace="http://spice.xxxx.com/cad/types" schemaLocation="com.xxxx.spice.cad.types.xsd">
        <xsd:annotation>
          <xsd:documentation>Cad service type definitions.</xsd:documentation>
        </xsd:annotation>
      </xsd:import>
    </xsd:schema>
  </wsdl:types>
....
</wsdl:definitions>

Then my maven build fail with this:

[INFO] --- jaxws:4.0.3:wsimport (cadservice) @ spicecad ---
[INFO] Processing: file:/D:/Dev/git/coc/spicecad/src/wsdl/cad.wsdl
[INFO] jaxws:wsimport args: [-keep, -s, 'D:\Dev\git\coc\spicecad\target\generated-sources\jaxws', -d, 'D:\Dev\git\coc\spicecad\target\classes', -verbose, -encoding, UTF-8, -extension, -Xnocompile, -catalog, 'D:\Dev\git\coc\spicecad\src\wsdl\catalog.xml', -wsdllocation, cad.wsdl, -B-Xannotate, -b, 'D:\Dev\git\coc\spicecad\src\jaxws\jaxws-cad.xml', -b, 'D:\Dev\git\coc\spicecad\src\jaxws\jaxb-xxxx_com_spice_cad_types.xml', "file:/D:/Dev/git/coc/spicecad/src/wsdl/cad.wsdl"]
WSDL wird geparst ...
[ERROR] cvc-elt.1.a: Deklaration des Elements "annox:annotateClass" kann nicht gefunden werden.
  Zeile 16 von file:/D:/Dev/git/coc/spicecad/src/jaxws/jaxb-xxxx_com_spice_cad_types.xml

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.jvnet.jax_ws_commons.jaxws.Invoker.main(Invoker.java:74)
Caused by: com.sun.tools.ws.wscompile.AbortException
        at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:114)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2241)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:161)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:111)
        at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:410)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:180)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:158)
        ... 5 more

It seems that "annox:annotateClass" could not be "resolved" during processing ...

Any idea why?

I'm using maven :

$mvn --version
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: D:\Dev\ApacheMaven\current-maven
Java version: 17.0.4, vendor: Oracle Corporation, runtime: D:\Dev\Java\jdk-17.0.4
Default locale: de_DE, platform encoding: Cp1252
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions