我成功地从多个wsdlendpoint使用maven-jaxb2-plugin生成java类。
这是一次执行:
<execution>
<id>generateDelta</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>com.somepackage1</generatePackage>
<schemas>
<schema>
<url>
wsdl_url
</url>
</schema>
</schemas>
</configuration>
</execution>
这里的问题是,我有多个执行,因此生成多个类,每个执行将类保存在不同的包中。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Bapiret2", propOrder = {...})
一个B类abiret2.java在多个包中生成(因此,它来自多个wdsls)
当我执行使用这个存根的代码时,例如在单元测试中,我会得到以下异常:
org.springframework.oxm.UncategorizedMappingException: Unknown JAXB exception; nested exception is com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
Two classes have the same XML type name "{urn:sap-com:document:sap:soap:functions:mc-style}Bapiret2". Use @XmlType.name and @XmlType.namespace to assign different names to them.
this problem is related to the following location:
at com.somepackage1.Bapiret2
this problem is related to the following location:
at com.somepackage2.Bapiret2
我发现了一些可能的修复方法,比如在args标记下添加配置
-XautoNameResolution
Arg,它不起作用
我测试了更改XmlType名称属性是否有效,并且确实有效。还可以向XmlType添加命名空间。
问题是我不知道如何添加这个与maven时生成的类
当来自不同包但具有相同名称空间的两个类都为JAXBContext所知时,您的问题属于JAXBContext。因此,您需要考虑以下几点:
Bapiret2
使用Somepackage1
和Somepackage2
时。如果不可能:
这两个类Bapiret2
是从同一个XSD模式生成的,并且实际结构是相同的吗?
如果是-您可能需要重新考虑您生成的包结构。
您只能为所有wsdl生成一个Bapiret2
类。有很多方法可以做到这一点,通常是通过向底层XJC编译器添加额外的映射参数,如
-p {namespace}={package Name}
只是检查插件留档如何做到这一点...(注意:有一个副作用:在包中将只有类从上次插件执行。
在这种情况下,我使用上面的第一个解决方案——不同的JAXBContext
但无论如何,下面有一些解决方案。(我从未尝试过,但人们似乎对此很满意:-)
获取jaxb异常就像两个类具有相同的xml类型名一样
extending-jaxb-representing-annotations.html
PS.手动(或通过一些脚本)更改后生成仍然是选项...
对于每个wsdl url,在configuration元素内部,您应该指定schemaDirectory和generatePackage元素,它们应该指向不同于其他元素的名称,因为schemaDirectory会产生一个副作用,即清除指定的目录。
问题内容: 我正在尝试使用jaxb生成xml。我创建了xsd并生成了Java类。但是,当我生成xml时,我会将ns2前缀添加到根标签中,这是我不想要的。 例如:我想成为根标签 ,但成为 在生成的java类中,我给了注解 可以帮个忙吗 问题答案: 如果这是您的课程: 然后就可以知道根元素上有一个前缀,因为您已指定“根”元素是名称空间限定的,而“ id”元素则不是。 如果将package-info类添
问题内容: 我有一个兼容ejb-3的ejb,例如 我需要为此EJB生成存根。但我不想使用Websphere工具或Maven工具。有什么方法可以使用jdk生成存根吗? 创建远程客户端时 可以在weblogic或jboss中工作,但是在websphere中,即使是ejb 3,您也需要这样编写 在这种情况下,如果客户端不存在存根,它将抛出异常,这是一种使用Websphere ejb存根生成器工具生成存根
我正在使用certifi python模块来验证ssl连接。我查看了certifi(Python2.7/site-packages/certifi/cacert.pem)中包含的根证书,其中一些证书已经过期。如何更新这些证书?我尝试使用pip更新certifi包,但它只更新包,而不更新根CA文件。
问题内容: 我正在开发一个Web服务,它需要传递一个新值作为对该服务内方法的引用。 我不熟悉或,但是需要类似的东西(因此创建一个新对象,据我了解返回)。 有任何想法吗? 问题答案: 您可以尝试以下方法: 资源 -
Spring RestDocs可用于为具有Spring MockMvc或RestEasy的HTTP API生成文档(例如,asciidoctor格式)。在生成API文档的同时,还可以使用Spring Cloud Contract WireMock生成WireMock存根。只需编写正常的RestDocs测试用例,并使用@AutoConfigureRestDocs在restdocs输出目录中自动存储存
我正在使用xml/映射库,下面是生成xml的方法: 结果和我想要的有点不同。它生成带有小写字母的XML标记: 但是我需要标签以大写字母开头: 我如何用大写字母强制生成?