gpt4 book ai didi

binding - 在类型生成期间使用 jaxb 绑定(bind)替换 XmlType.namespace

转载 作者:行者123 更新时间:2023-12-02 11:36:50 27 4
gpt4 key购买 nike

我的 Web 服务应用程序正在从 Axis 迁移到 JAX-WS,但我在进行某些转换时遇到了问题。我的主要问题是,我有几个具有相同类型的 XSD,其定义略有不同,但名称相同。在 wsimport 期间,我可以使用外部 JAXB 绑定(bind)文件来解析包,但生成的类最终仍具有相同的 @XmlType 注释。

V1:

package com.service.v1.bill.request;
@XmlType(name = "FileBillReqType", namespace = "http://epayments.metavante.com/types/bill/request"})
public class FileBillReqType extends AbstractContextMethodRequest...

V2:

package com.service.v2.bill.request;
@XmlType(name = "FileBillReqType", namespace = "http://epayments.metavante.com/types/bill/request"})
public class FileBillReqType extends AbstractContextMethodRequest...

绑定(bind):

<jaxb:bindings schemaLocation="file:../wsdl/v1/bill/BillRequest.xsd" 
node="/xs:schema[@targetNamespace='http://service.example.com/bill/request']">
<jaxb:schemaBindings>
<jaxb:package name="com.service.v1.bill.request" />
</jaxb:schemaBindings>
</jaxb:bindings>

以前,这个问题可以通过 axis 提供的类型映射来解决(我们将其硬编码到一个非常丑陋的 wsdd 中):

<service name="v1" provider="java:RPC" style="document" use="literal">...
<typeMapping
xmlns:ns="http://service.example.com/bill/request"
qname="ns:FileBillReqType"
type="java:com.service.v1.bill.request.FileBillReqType"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle=""
/>...

有没有办法让我生成的 JAXB 对象拥有自定义命名空间,而无需每次重新生成它们时手动修改生成的文件(有数百个)?

最佳答案

在使用 wsimport 生成客户端类时指定另一个使用 v2 作为架构位置的 xjb 自定义可能会解决问题。

<jaxb:bindings schemaLocation="file:../wsdl/v2/bill/BillRequest.xsd"
node="/xs:schema[@targetNamespace='http://service.example.com/bill/request']">
<jaxb:schemaBindings>
<jaxb:package name="com.service.v2.bill.request" />
</jaxb:schemaBindings>
</jaxb:bindings>

关于binding - 在类型生成期间使用 jaxb 绑定(bind)替换 XmlType.namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5599910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com