首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB2源生成

JAXB2源生成
EN

Stack Overflow用户
提问于 2015-01-23 09:54:05
回答 2查看 127关注 0票数 0

我有带有Hibernate和验证注释的User实体,如下所示。

代码语言:javascript
复制
@Entity
@Table(name = "USER")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {
        "id",
        "login"
})
public class User {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @XmlElement(required = true, type = Long.class, nillable = true)
    private Long id;

    @Pattern(regexp = "^[a-zA-Z0-9_-]{3,20}$",
             message = "Login must contains from 3 to 20 latin characters or numbers!")
    @Column(name = "LOGIN", unique = true, nullable = false)
    @XmlElement(required = true)
    private String login;
}

当我用entity和getUserRequest /getUserResponse编写xsd模式时,maven-jaxb2-plugin会将GetUserRequest.javaGetUserResponse.javaUser.java与我的User类一起生成到包中(如果我尝试编译这个类,则会生成重复的类)。

代码语言:javascript
复制
<xs:complexType name="User">
    <xs:sequence>
        <xs:element name="id" type="xs:long" nillable="true"/>
        <xs:element name="login" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<xs:element name="getUserRequest">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="userId" type="xs:long"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="getUserResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="user" type="tns:User"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

我想使用我的User类,而不是生成的类。(如果我删除生成的用户并启动应用程序,一切正常)。

这是我的春夏秋冬所需要的

代码语言:javascript
复制
@Endpoint
public class UserEndpoint {
    @Autowired
    private UserService userService;
    @ResponsePayload
    @PayloadRoot(namespace = SOAP_NAMESPACE, localPart = "getUserRequest")
    public GetUserResponse getUser(@RequestPayload GetUserRequest request) {
        springapp.domain.User user =
                userService.getUser(request.getUserId());
        GetUserResponse response = new GetUserResponse();
        response.setUser(toSchemaType(user));
        return response;
    }
    private springapp.schema.User toSchemaType(springapp.domain.User user) {
        springapp.schema.User schemaUser = new springapp.schema.User();
        if (user.getId() != null) {
            schemaUser.setId(user.getId());
        }
        schemaUser.setLogin(user.getLogin());
        return schemaUser;
    }
}

多亏了字典。我创建了domain.xjb

代码语言:javascript
复制
<jxb:bindings version="1.0"
               xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">

    <jxb:bindings schemaLocation="users.xsd">
        <jxb:bindings node="//xs:complexType[@name='User']">
            <jxb:class ref="springapp.domain.User"/>
        </jxb:bindings>
    </jxb:bindings>

</jxb:bindings>

并添加到maven-jaxb2-plugin配置中:

代码语言:javascript
复制
<bindingDirectory>src/main/resources</bindingDirectory>
<bindingIncludes>
    <include>domain.xjb</include>
</bindingIncludes>

对我来说很管用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-23 14:15:37

您可以使用jaxb:class/@ref绑定告诉XJC您已经有了一个User类。见这个问题:

JAXB:防止类重新生成

但是,我个人只需要为每个端点编写所需的两个类,并且完全避免模式编译。

票数 0
EN

Stack Overflow用户

发布于 2015-01-23 12:16:14

实际上,我将类CoversionUtils创建为弹簧WS样品。我花了两天没找到别的办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28107161

复制
相关文章

相似问题

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