Java JAX-WS处理可选的可零值

Java JAX-WS处理可选的可零值,java,web-services,jaxb,jax-ws,Java,Web Services,Jaxb,Jax Ws,我正在使用JAX-WS创建一个web服务。它是使用sun-jaxws.xml从@WebService注释类创建的 我有一个新的要求,一些领域都是可选和零。对于此类字段,如果传递nill,我必须写入DB NULL,但如果未传递值,我不应接触DB值 为了能够区分这些情况,我尝试将@xmlementref添加到这些字段中,但JAXB失败,出现以下错误: SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebSe

我正在使用JAX-WS创建一个web服务。它是使用sun-jaxws.xml从
@WebService
注释类创建的

我有一个新的要求,一些领域都是可选和零。对于此类字段,如果传递nill,我必须写入DB NULL,但如果未传递值,我不应接触DB值

为了能够区分这些情况,我尝试将
@xmlementref
添加到这些字段中,但JAXB失败,出现以下错误:

SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException: Unable to create JAXBContext
javax.xml.ws.WebServiceException: Unable to create JAXBContext
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:164)
    at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:94)

[...]

Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
There's no ObjectFactory with an @XmlElementDecl for the element {}lastName.
    this problem is related to the following location:
        at private javax.xml.bind.JAXBElement com.example.test.Person.lastName
        at com.example.test.Person
        at public com.example.test.Person com.example.test.jaxws.UpdatePerson.person
        at com.example.test.jaxws.UpdatePerson
问题。这个任务可以用JAX-WS完成吗?如果没有,解决此类问题的常用方法是什么

以下是我的最小完整示例:

@XmlType(name = "Person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
    @XmlElementRef(name="lastName")
    private JAXBElement<String> lastName;

    public JAXBElement<String> getLastName() {
        return lastName;
    }

    public void setLastName(JAXBElement<String> lastName) {
        this.lastName = lastName;
    }

}

EDIT:问题的主题类似,但我们不使用请求/响应初始模式来馈送
xjc
。使用
xjc
是使用
@xmlementref
注释的唯一方法吗?

您需要使用使用异常描述的
@xmlememtdecl
注释的create方法创建
ObjectFactory
类:

Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
There's no ObjectFactory with an @XmlElementDecl for the element {}lastName.
    this problem is related to the following location:
        at private javax.xml.bind.JAXBElement com.example.test.Person.lastName
它看起来类似于以下内容:

@XmlRegistry
public class ObjectFactory {

    @XmlElementDecl(name="lastName")
    public JAXBElement<String> createLastName(String value) {
        return new JAXBElement<String>(new QName("lastName"), String.class, value);
    }

}
@XmlRegistry
公共类对象工厂{
@xmlementdecl(name=“lastName”)
公共JAXBElement createLastName(字符串值){
返回新的JAXBElement(新的QName(“lastName”)、String.class、value);
}
}
@XmlRegistry
public class ObjectFactory {

    @XmlElementDecl(name="lastName")
    public JAXBElement<String> createLastName(String value) {
        return new JAXBElement<String>(new QName("lastName"), String.class, value);
    }

}