JAXB“(变量)是不是有效的属性”上使用ResponseWrapper(JAXB “(variab

2019-09-27 04:24发布

我有一个web服务:

@WebService()
public interface WMCService {

    @WebMethod(operationName="getGroupInfoFromUserId")
    @ResponseWrapper(className="wmc.web.service.BasicGroupWrapper")
    @WebResult(name="basicGroup")
    BasicGroup getGroupInfoFromUserId(@WebParam(name = "id") Long id);
}

@WebService(endpointInterface="wmc.web.service.WMCService", serviceName="WMCService")
public class WMCServiceImpl implements WMCService {

    @Override
    public BasicGroup getGroupInfoFromUserId(Long id) {
        UserHelper uh = new UserHelper();
        WMCUser user = uh.getById(id);
        if (user != null) {
            return user.getBasicGroup();
        } else {
            return null;
        }
    }
}

和我有ResponseWrapper此类:

@XmlRootElement()
@XmlType(name="Group")
@XmlAccessorType(XmlAccessType.FIELD)
public class BasicGroupWrapper {

    @XmlElement(name="groupName")
    private String groupName;
    @XmlElement(name="groupId")
    private Long groupId;
    @XmlTransient
    private BasicGroup basicGroup;

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public Long getGroupId() {
        return groupId;
    }

    public void setGroupId(Long groupId) {
        this.groupId = groupId;
    }

    public void setBasicGroup(BasicGroup group) {
        this.groupName = group.getGroupName();
        this.groupId = group.getId();
        this.basicGroup = group;
    }

    public BasicGroup getBasicGroup() {
        return basicGroup;
    }

}

当我测试这个操作我碰到下面的错误,我不能谷歌的解决方案。 也许你可以提供帮助。

Caused by: javax.xml.bind.JAXBException: basicGroup is not a valid property on class wmc.web.service.BasicGroupWrapper
            at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getElementPropertyAccessor(JAXBContextImpl.java:971)
            at com.sun.xml.ws.server.sei.EndpointResponseMessageBuilder$DocLit.<init>(EndpointResponseMessageBuilder.java:203)
        ... 34 more

Answer 1:

@WebResult(name="basicGroup")这是不是你的WSDL的一部分,因为它被标记为XmlTransient

@XmlTransient
private BasicGroup basicGroup;

因此,这将不能够挑选出的那部分你的回应。



Answer 2:

我有同样的问题时,有MS Web服务和Java客户端上的JBoss。 我使用wsconsume生成stub类。 之后,我通常会被删除package-info.java,因为我认为这是多余的类。 之后这种情况下转载。 过了一段时间我试图包含这个文件(package-info.java)到项目。 它解决了这个问题。

但是,当我使用的Java Web服务(在JBoss)它完美的作品,即使没有包信息类。 这是非常奇怪的。 仅供参考。

下面的链接是有益的: 链接



文章来源: JAXB “(variable) is not a valid property” on a ResponseWrapper