Clickatell SOAP wsdl to JAXB java classes

2022-09-03 01:08:05

我正在尝试从 Clickatell wsdl 生成 JAXB 类:你可以在这里找到 wsdl 定义,它非常大:http://api.clickatell.com/soap/webservice.php?WSDL

当尝试从这个Wsdl生成java类时,我得到了以下错误:[错误]未定义的简单或复杂类型'SOAP-ENC:Array' [错误]未定义的属性'SOAP-ENC:arrayType'

我希望有人能帮助我。干杯,蒂姆


答案 1

架构是指架构中定义的类型,但 wsdl 中不包含该架构。SOAP-ENC:Arrayxmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/

我遇到了类似的问题,不得不使用目录来告诉jaxb / xjc在哪里可以找到模式。

转到 http://schemas.xmlsoap.org/soap/encoding/ 并另存为 soapenc.xsd

然后创建一个包含以下内容的纯文本文件

PUBLIC "http://schemas.xmlsoap.org/soap/encoding/" "soapenc.xsd"

然后将该文件作为目录文件传递给 xjc


更新:如果你在maven上,这就是它如何挂在一起。

将 schema、soapenc.xsd 和 catalog.cat(纯文本文件)放在 src/main/resources 中

然后告诉 jaxb 插件将目录传递给 xjc

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <executions>
      <execution>
        <id>wsdl-generate</id>
        <configuration>
          <schemaIncludes>
            <include>*.wsdl</include>
          </schemaIncludes>
          <catalog>${project.basedir}/src/main/resources/catalog.cat</catalog>
        </configuration>
        <goals>
          <goal>generate</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

答案 2

我认为最好的方法是使用旧的好轴1.4。它被设计为与rpc服务一起使用,它通常完成它的工作。主要问题是这个库非常非常旧(这个罐子在2006年被上传到中央),它不再被维护了。

如果您决定尝试一下,只需将以下依赖项添加到您的pom中即可:

<dependency>
    <groupId>axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

添加以下插件:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>axistools-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
    </dependencies>
    <configuration>
        <sourceDirectory>${project.basedir}/src/main/resources</sourceDirectory>
        <wsdlFiles>
            <wsdlFile>my_service.wsdl</wsdlFile>
        </wsdlFiles>
    </configuration>
</plugin>

将您的 wsdl 文件放入 其中,然后通过 构建应用程序。src/main/resources/my_service.wsdlmvn clean package

插件详细信息可以在这里找到


推荐