JAXB

2010-12-01 5 views
1

가 나는 웹 서비스 가지고 ResponseWrapper에 "(변수) 유효한 속성이 아닙니다입니다"JAXB

@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에 해결할 수 없습니다. 어쩌면 당신이 도울 수 있습니다. 이 XmlTransient로 표시이기 때문에

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

왜 XmlTransient입니까? – Bozho

+0

응답에서 그룹 이름과 ID 만 필요합니다. – AnAmuser

답변

4

@WebResult(name="basicGroup")이는 WSDL의 일부가 아닌 :

@XmlTransient 
private BasicGroup basicGroup; 

그래서 당신의 응답의 부분을 선택할 수 없습니다.

+0

그러나 필드 basicGroup에있는 정보가 groupName 및 groupId 만 원하지 않습니다. – AnAmuser

+0

그러나 당신의 대답에'@WebResult (name = "basicGroup")'이 - 아마도 "groupName"또는 "groupId"가되어야할까요? –

2

JBoss에 MS 웹 서비스 및 Java 클라이언트가있는 경우에도 동일한 문제가있었습니다. wsconsume을 사용하여 스텁 클래스를 생성했습니다. 그리고 이후에 나는 이것이 중복 클래스라고 생각했기 때문에 보통 package-info.java를 삭제했습니다. 그 후이 사건이 재현되었다. 얼마 후이 파일 (package-info.java)을 프로젝트에 포함하려고했습니다. 그리고 그 문제를 해결했습니다.

하지만 Java Web Service (JBoss에서)를 사용했을 때 패키지 정보 클래스가 없어도 완벽하게 작동합니다. 매우 이상합니다. 그냥 참고하시기 바랍니다.

다음 링크가 도움이되었습니다. link