JAXB "(переменная) не является допустимым свойством" в ResponseWrapper - PullRequest
1 голос
/ 01 декабря 2010

У меня есть веб-сервис:

@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;
    }

}

Когда я проверяю эту операцию, я получаю следующую ошибку, которую я не могу найти в Google. Может быть, вы можете помочь.

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

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

@WebResult(name="basicGroup") это не часть вашего WSDL, так как он помечен как XmlTransient:

@XmlTransient
private BasicGroup basicGroup;

Так что он не сможет выбрать эту часть для вашего ответа.

2 голосов
/ 29 сентября 2011

У меня была такая же проблема, когда на JBoss были MS Web Service и Java клиент. Я генерировал классы-заглушки, используя wsconsume. И после этого я обычно удалял package-info.java, потому что думал, что это избыточный класс. После этого этот случай воспроизводится. Через некоторое время я попытался включить этот файл (package-info.java) в проект. И это решило проблему.

Но когда я использовал Java Web Service (на JBoss), он отлично работает даже без класса package-info. Это очень странно Просто к вашему сведению.

Следующая ссылка была полезна: ссылка

...