首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量重命名JAX绑定文件中的complexType元素,即bindings.xjb?

批量重命名JAX绑定文件中的complexType元素,即bindings.xjb?
EN

Stack Overflow用户
提问于 2021-02-24 05:22:20
回答 1查看 57关注 0票数 0

我正在使用一个外部第三方WSDL文件,并试图从它生成Java代码。

WSDL包含<s:element><s:complexType>之间的名称冲突。例如:

代码语言:javascript
复制
      <s:element name="Foo"> <!-- name conflict -->
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="SoapMessage" type="tns:Foo" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="Foo"> <!-- name conflict -->
        <s:complexContent mixed="false">
          <s:extension base="tns:SoapMessageBase">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="Request" type="tns:FooRequest" />
              <s:element minOccurs="0" maxOccurs="1" name="Response" type="tns:FooResponse" />
            </s:sequence>
          </s:extension>
        </s:complexContent>
      </s:complexType>

我知道有了正确的bindings.jxb,它们中的一个可以重命名。这正是named the s:element and s:complexType the same name中描述的问题

然而,上面帖子中的解决方案并不是真的有效。像100+一样,WSDL中有很多名称冲突。

在我创建一个bindings.xjb来解决每一个问题之前。(是的,我可以写一个脚本),有没有更简单的方法来解决这个问题?比如模式匹配+批量重命名?

更新

到目前为止,我能找到的是对每个Issue with JAXB: nameXmlTransform typeName prefix not working使用<jaxb:nameXmlTransform>

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
   <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
      <jaxb:schemaBindings>
         <jaxb:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Hi_"/>
            <jaxb:elementName prefix="Hi_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 

但挑战是<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema"> -外部WSDL提供程序根本不提供任何.xsd文件。

这是只提供WSDL的常见场景吗?还是因为我错过了什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-24 06:08:36

事实证明schemaLocation="./services.wsdl#types1"解决了这个问题。现在,我可以在没有XSD的情况下从WSDL生成代码。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
    <jaxb:bindings schemaLocation="./services.wsdl#types1">
        <jaxb:schemaBindings>
            <jaxb:nameXmlTransform>
                <jaxb:typeName suffix="Type" />
                <jaxb:elementName suffix="Element" />
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxb:bindings>
</jaxb:bindings>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66341286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档