Web Services 单击将SOAP wsdl转换为JAXB java类

pxy2qtax  于 2022-11-15  发布在  Java
关注(0)|答案(5)|浏览(205)

我尝试从Clickatell wsdl生成JAXB类:您可以在这里找到wsdl定义,它相当大:http://api.clickatell.com/soap/webservice.php?WSDL
当我尝试从这个Wsdl生成java类时,出现了以下错误:[错误]未定义的简单或复杂型别'SOAP-ENC:Array' [错误]未定义的属性'SOAP-ENC:arrayType'
我希望有人能帮我。干杯,蒂姆

58wvjzkj

58wvjzkj1#

您的模式引用了模式xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/中定义的类型SOAP-ENC:Array,但该模式未包含在wsdl中。
我遇到了类似的问题,不得不使用目录告诉jaxb/xjc在哪里可以找到模式。
转到http://schemas.xmlsoap.org/soap/encoding/并另保存为soapenc.xsd
然后创建包含以下内容的纯文本文件

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

然后将该文件作为目录文件传递给xjc
更新:如果你是对maven,这是如何将所有挂在一起。
将架构、soapenc.xsd和catalog.cat(纯文本文件)放在src/main/resources中
然后告诉jaxb插件将目录传递给xjc

  1. <plugin>
  2. <groupId>org.jvnet.jaxb2.maven2</groupId>
  3. <artifactId>maven-jaxb2-plugin</artifactId>
  4. <executions>
  5. <execution>
  6. <id>wsdl-generate</id>
  7. <configuration>
  8. <schemaIncludes>
  9. <include>*.wsdl</include>
  10. </schemaIncludes>
  11. <catalog>${project.basedir}/src/main/resources/catalog.cat</catalog>
  12. </configuration>
  13. <goals>
  14. <goal>generate</goal>
  15. </goals>
  16. </execution>
  17. </executions>
  18. </plugin>
展开查看全部
y4ekin9u

y4ekin9u2#

我认为最好的方法是使用旧的good axis 1. 4。它被设计为与rpc服务一起工作,它通常完成它的工作。主要的问题是这个库非常非常旧(jar在2006年被上传到中央),它不再被维护了。
如果您决定给予一下,只需将以下依赖项添加到您的pom中:

  1. <dependency>
  2. <groupId>axis</groupId>
  3. <artifactId>axis</artifactId>
  4. <version>1.4</version>
  5. </dependency>

添加以下插件:

  1. <plugin>
  2. <groupId>org.codehaus.mojo</groupId>
  3. <artifactId>axistools-maven-plugin</artifactId>
  4. <version>1.4</version>
  5. <executions>
  6. <execution>
  7. <goals>
  8. <goal>wsdl2java</goal>
  9. </goals>
  10. </execution>
  11. </executions>
  12. <dependencies>
  13. <dependency>
  14. <groupId>javax.activation</groupId>
  15. <artifactId>javax.activation-api</artifactId>
  16. <version>1.2.0</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>javax.mail</groupId>
  20. <artifactId>mail</artifactId>
  21. <version>1.4.7</version>
  22. </dependency>
  23. </dependencies>
  24. <configuration>
  25. <sourceDirectory>${project.basedir}/src/main/resources</sourceDirectory>
  26. <wsdlFiles>
  27. <wsdlFile>my_service.wsdl</wsdlFile>
  28. </wsdlFiles>
  29. </configuration>
  30. </plugin>

把你的wsdl文件放到src/main/resources/my_service.wsdl中,然后用mvn clean package构建应用程序。
插件详细信息可在here中找到

展开查看全部
q1qsirdb

q1qsirdb3#

请查看www.example.com上的WS-I基本配置文件-1.1规范http://www.ws-i.org/Profiles/BasicProfile-1.1.html#soapenc_Array
上面写着:
R2110在说明中,声明不得扩展或限制soapenc:Array类型。
R2111在说明中,声明不得在类型声明中使用wsdl:arrayType属性。
R2112在描述中,元素不应使用ArrayOfXXX约定命名。
R2113信封不得包含soapenc:arrayType属性。
哟!

vc9ivgsu

vc9ivgsu4#

我在使用axis1.5的wsdl2java实用程序时,我们在数组上遇到了类似的错误。

  1. Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
  2. at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
  3. at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
  4. at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
  5. Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
  6. at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
  7. at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
  8. ... 2 more
  9. Caused by: java.lang.reflect.InvocationTargetException
  10. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  11. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  12. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  13. at java.lang.reflect.Method.invoke(Method.java:597)
  14. at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
  15. ... 3 more
  16. Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type {http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ....
  17. at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1296)
  18. at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1258)
  19. at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1153)
  20. at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1097)
  21. at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)

正如上面关于soapenc.xsd的回答之一所解释的,我尝试通过使用网站“http://schemas.xmlsoap.org/soap/encoding/”的内容创建soapenc.xsd来更新我的wsdl文件。如下所示,这对我来说真的很有效。

  1. <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1= .. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace=..>
  2. <types>
  3. <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace=.. xmlns:ns1=.. xmlns:ns2=.. xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
  4. </types>
  5. <import location="soapenc.xsd" namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  6. <message name="Input">
  7. <part name=../>
  8. </message>
  9. <message name="Output">
  10. <part name=../>
  11. </message>
  12. <portType name=".."> .. </portType>
  13. <binding name="..." type="tns:"..">
  14. <operation name="..."> .. </operation>
  15. <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  16. </binding>
  17. <service name="...">
  18. <port binding="tns:..." name="..."> <soap:address location="..."/> </port>
  19. </service>
展开查看全部
rt4zxlrg

rt4zxlrg5#

JAXB不支持RPC/编码。请使用JAX-RPC来解决此问题。

相关问题