2010-12-01 11 views
1

Ich habe einen Webservice:JAXB "(Variable) ist keine gültige Eigenschaft" auf einem ResponseWrapper

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

und ich habe die 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; 
    } 

} 

Wenn ich diese Operation testen ich die Folgefehler, zu dem ich keine Lösung googlen kann. Vielleicht kannst du helfen.

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 
+0

warum ist es XmlTransient? – Bozho

+0

Ich möchte nur den groupName und die ID in der Antwort. – AnAmuser

Antwort

4

@WebResult(name="basicGroup") dies nicht Ihre WSDL-Teil, da es als XmlTransient markiert ist:

@XmlTransient 
private BasicGroup basicGroup; 

So wird es nicht möglich sein, dass ein Teil des für Ihre Antwort auszuwählen.

+0

Aber ich will nicht die Info, die im Feld basicGroup nur der groupName und der groupId ist. – AnAmuser

+0

Aber in deiner Antwort, warum sagst du '@WebResult (name =" basicGroup ")' - sollte dies "" groupName "" oder "groupId" sein? –

2

Ich hatte das gleiche Problem, wenn MS Web Service und Java-Client auf JBoss waren. Ich generiert Stub-Klassen mit wsconsume. Und danach habe ich in der Regel package-info.java gelöscht, weil ich dachte, dass dies redundante Klasse ist. Danach hat sich dieser Fall wiederholt. Nach einiger Zeit habe ich versucht, diese Datei (package-info.java) in das Projekt einzufügen. Und es hat das Problem gelöst.

Aber wenn ich Java Web Service (auf JBoss) verwendet habe, funktioniert es auch ohne Paket-Info-Klasse perfekt. Es ist sehr seltsam. Nur zu deiner Information.

Nach Link hilfreich: link

Verwandte Themen