如何配置 JAXB 以使其默认修剪空格

发布于 2024-12-04 14:04:59 字数 371 浏览 1 评论 0原文

我想配置 JAXB,以便它修剪所有字符串字段上的空格

我看到以下答案: 如何配置 JAXB,以便在解组标记值时修剪空格?

但我不想这样做根据建议的答案注释所有字符串字段

@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;

谢谢!

I would like to configure JAXB so that it trims whitespaces on all string fields

I saw the following answer : How to configure JAXB so it trims whitespaces when unmarshalling tag value?

But I do not want to have to annotate all string fields as per the suggested answer

@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尹雨沫 2024-12-11 14:04:59
  1. 创建 XmlAdapter< /a>.

    package com.foo.bar;
    公共类 StringTrimAdapter 扩展 XmlAdapter {
        @覆盖
        公共字符串解组(字符串v)抛出异常{
            如果(v == null)
                返回空值;
            返回 v.trim();
        }
        @覆盖
        公共字符串元帅(字符串v)抛出异常{
            如果(v == null)
                返回空值;
            返回 v.trim();
        }
    }
    

  2. com.foo.bar中创建一个package-info.java文件。

  3. 将以下内容添加到package-info.java文件

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class)
    包 com.foo.bar;
    导入 javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
    
  4. 这会将 StringTrimAdapter 应用于所有 String com.foo.bar 中的 字段,没有任何额外的注释。

编辑
请注意,如果包级别注释对您来说太大,您始终可以将 @XmlJavaTypeAdapter 注释应用于类。

  1. Create a XmlAdapter.

    package com.foo.bar;
    public class StringTrimAdapter extends XmlAdapter<String, String> {
        @Override
        public String unmarshal(String v) throws Exception {
            if (v == null)
                return null;
            return v.trim();
        }
        @Override
        public String marshal(String v) throws Exception {
            if (v == null)
                return null;
            return v.trim();
        }
    }
    
  2. Create a package-info.java file in com.foo.bar.

  3. Add the following to the package-info.java file

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class)
    package com.foo.bar;
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
    
  4. This will apply StringTrimAdapter to all String fields in com.foo.bar without any extra annotations.

EDIT
Do note that if the package level annotation is too expansive for you, you could always apply a @XmlJavaTypeAdapter annotation to classes.

真心难拥有 2024-12-11 14:04:59

可能值得一提的是,除了编写执行修剪的 XmlAdapter 之外,您可以配置 XJC 以在生成的代码中实际使用此适配器。如何执行此操作的示例:

<jaxb:globalBindings>
    <xjc:javaType 
         name="java.lang.String" 
         xmlType="xs:string" 
         adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>

上面的示例使用 Sahil 的答案中给出的 XmlAdapter

It might be worth mentioning, that in addition to writing an XmlAdapter, which performs the trimming, you can configure XJC to actually use this adapter in generated code. An example of how to do it:

<jaxb:globalBindings>
    <xjc:javaType 
         name="java.lang.String" 
         xmlType="xs:string" 
         adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>

The above example uses the XmlAdapter given in Sahil's answer

她说她爱他 2024-12-11 14:04:59

为了使配置 XJC (在 Lukas Eder 提供的答案中) 的示例完整,
我想添加以下示例配置,我们需要在 maven 的 pom.xml 中添加

    <build>
    .
    .
    <execution>
       <id>responseSchema</id>
       <goals>
          <goal>xjc</goal>
       </goals>
       <phase>generate-sources</phase>
       <configuration>
          <clearOutputDir>false</clearOutputDir>
          <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
          <packageName>com.foo.bar.domain.response</packageName>
          <bindingFiles>../resources/bindings.xjb</bindingFiles>
          <schemaDirectory>${project.basedir}/src/main/resources/wsdl/xsd</schemaDirectory>
          <schemaFiles>response.xsd</schemaFiles>
          <extension>true</extension>
       </configuration>
    </execution>
    .
    .
 </build>

我们需要在 bindings.xjb 中添加以下内容。

<jaxb:globalBindings>
    <xjc:javaType 
         name="java.lang.String" 
         xmlType="xs:string" 
         adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>

To make the example of configuring XJC (in the answer provided by Lukas Eder) complete,
i would like to add the following sample configuration which we need to add in maven's pom.xml

    <build>
    .
    .
    <execution>
       <id>responseSchema</id>
       <goals>
          <goal>xjc</goal>
       </goals>
       <phase>generate-sources</phase>
       <configuration>
          <clearOutputDir>false</clearOutputDir>
          <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
          <packageName>com.foo.bar.domain.response</packageName>
          <bindingFiles>../resources/bindings.xjb</bindingFiles>
          <schemaDirectory>${project.basedir}/src/main/resources/wsdl/xsd</schemaDirectory>
          <schemaFiles>response.xsd</schemaFiles>
          <extension>true</extension>
       </configuration>
    </execution>
    .
    .
 </build>

We need to have the following content to be added in bindings.xjb.

<jaxb:globalBindings>
    <xjc:javaType 
         name="java.lang.String" 
         xmlType="xs:string" 
         adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文