2010-12-01 32 views
1

J'ai un webservice:JAXB "(variable) n'est pas une propriété valide" sur un 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; 
     } 
    } 
} 

et j'ai le 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; 
    } 

} 

Quand je teste cette opération, je reçois la erreur suivante que je ne peux pas google une solution. Peut-être que vous pouvez aider.

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

pourquoi est-il XmlTransient? – Bozho

+0

Je veux seulement le groupName et l'Id dans la réponse. – AnAmuser

Répondre

4

@WebResult(name="basicGroup") ce ne fait pas partie de votre WSDL car il est marqué comme XmlTransient:

@XmlTransient 
private BasicGroup basicGroup; 

Il ne sera pas en mesure de choisir cette partie de votre réponse.

+0

Mais je ne veux pas l'information qui est dans le champ basicGroup seulement le groupName et le groupId. – AnAmuser

+0

Mais dans votre réponse, pourquoi dire '@WebResult (name =" basicGroup ")' - devrait-il être '' "groupName" 'ou' "groupId" 'peut-être? –

2

J'ai rencontré le même problème lorsque MS Web Service et le client Java étaient sur JBoss. J'ai généré des classes stub en utilisant wsconsume. Et après cela, j'ai généralement supprimé package-info.java parce que je pensais que c'est une classe redondante. Après cela, ce cas s'est reproduit. Après un certain temps, j'ai essayé d'inclure ce fichier (package-info.java) dans le projet. Et cela a résolu le problème. Mais quand j'ai utilisé Java Web Service (sur JBoss), ça marche parfaitement même sans classe de paquets-info. C'est très étrange. Juste FYI.

lien suivant utile: link