代码之家  ›  专栏  ›  技术社区  ›  Boris Pavlović

如何使用JAXB从xsd生成实现可序列化接口的Java类?

  •  48
  • Boris Pavlović  · 技术社区  · 16 年前

    我想将缓存引入到一个现有的Spring项目中,该项目使用JAXB来公开WebServices。缓存将在端点级别完成。为了实现这一点,使用JAXB从XSD生成的类需要实现 Serializable Object toString() 方法。

    6 回复  |  直到 11 年前
        1
  •  77
  •   Pascal Thivent    16 年前

    使用 xjc:serializable 在自定义绑定文件中添加 java.io.Serializable serialVersionUID

    <?xml version="1.0" encoding="UTF-8"?>
    <bindings xmlns="http://java.sun.com/xml/ns/jaxb"
                xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
                xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
                xsi:schemaLocation="
    http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    version="2.1">
      <globalBindings>
        <serializable uid="1" />
      </globalBindings>
    </bindings> 
    

    toString()

    使用超类(参见 xjc:superClass toString()

    <?xml version="1.0" encoding="UTF-8"?>
    <bindings xmlns="http://java.sun.com/xml/ns/jaxb"
                    xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
                    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
                    xsi:schemaLocation="
    http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
        version="2.1">
        <globalBindings>
            <serializable uid="1" />
            <xjc:superClass name="the.package.to.my.XmlSuperClass" />
        </globalBindings>
    </bindings>
    
        2
  •  8
  •   halfer Jatin Pandey    6 年前

    这对我奏效了:

    <?xml version="1.0" encoding="UTF-8"?>
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1">
        <jaxb:globalBindings>
            <xjc:serializable uid="1337"/>
        </jaxb:globalBindings>
    </jaxb:bindings>
    
        3
  •  5
  •   artspb    13 年前

    toString() 方法- JAXB2 Basics Plugins

    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.8.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>
                        ${project.basedir}/src/main/resources
                    </schemaDirectory>
                    <generateDirectory>
                        ${project.basedir}/src/main/java
                    </generateDirectory>
                    <extension>true</extension>
                    <args>
                        <arg>-XtoString</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics</artifactId>
                            <version>0.6.4</version>
                        </plugin>
                    </plugins>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics-runtime</artifactId>
            <version>0.6.4</version>
        </dependency>
    </dependencies>
    

    public String toString() {
        final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
        final StringBuilder buffer = new StringBuilder();
        append(null, buffer, strategy);
        return buffer.toString();
    }
    
    public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
        strategy.appendStart(locator, this, buffer);
        appendFields(locator, buffer, strategy);
        strategy.appendEnd(locator, this, buffer);
        return buffer;
    }
    
    public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
        {
            String theName;
            theName = this.getName();
            strategy.appendField(locator, this, "name", buffer, theName);
        }
        {
            String theBank;
            theBank = this.getBank();
            strategy.appendField(locator, this, "bank", buffer, theBank);
        }
        return buffer;
    }
    
        4
  •  2
  •   BERGUIGA Mohamed Amine    11 年前

    我使用这段代码,它为我工作

    <?xml version="1.0" encoding="UTF-8"?>
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1">
        <jaxb:globalBindings>
            <xjc:serializable uid="1"/><!--If you Forgot this line your class did not be serializable--!>
        </jaxb:globalBindings>
    </jaxb:bindings>
    
        5
  •  1
  •   Gio    9 年前

    为了获得接口可序列化,请将以下绑定信息添加到xsd文件中:

    <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" > <xs:annotation> <xs:appinfo> <jaxb:globalBindings optionalProperty="primitive"> <jaxb:serializable/> </jaxb:globalBindings> </xs:appinfo> </xs:annotation> <xs:element name="myXsdElement"> ..... </xs:element> </xs:schema>

        6
  •  1
  •   Jacques Koorts    9 年前

    这是一个使用CXF 3.1.10的示例。请记住包含编译组:“org.apache.cxf.xjc-utils”,名称:“cxf-xjc-runtime”,版本:“3.1.0”

    <jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
    
    <jxb:bindings schemaLocation="META-INF/wsdl/xsd2.xsd">
    
            <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
                    <jxb:serializable uid="1"/>
                  </jxb:globalBindings>