2010-06-26 3 views
1

우리는 Apache CXF 코드 우선 접근 방식을 사용하여 웹 서비스를 작성합니다. 우리는 사용자 자격 증명을 전달하는 사용자 정의 비누 헤더가 있습니다.Apache CXF - wsdl 생성을 알리는 오류

@webparam 주석을 사용하여 SEI에서 usercredentials를 전달하려고합니다.

이들은 Service 클래스의 두 가지 연산입니다.

@Path("/item/{id}") 
@GET 
public Item getItem(@PathParam("id") String id, 
@WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException; 

@Path("/name/{id}") 
@GET 
public Item getItemByName(@PathParam("id") String id, 
@WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException; 

담아서 WSDL을 생성하는 말 에러가 발생하면서

D : \ 작업 영역 \의는 myService \ SRC \ 메인 \ 자바 \ COM \ WS \ API \ ItemPublicationWebService.java : 52 : [XML] 웹 메소드는 D : \ workspace \ myService \ src \ main \ java \ com \ ws \ api \ ItemPublicationWebService.java에 정의 된 웹 메시지 파트의 이름과 동일한 'userDetails'라는 메시지 파트를 정의합니다. 모호성을 제거하려면 특수 효과를 사용하십시오.

webParam 이름을 고유하게 유지하면 wsdl이 생성된다는 것을 알게되었습니다. 그러나 그것은 예상 된 결과가 아닙니다.

무엇이 여기에 있습니까?

답변

0

여기서 Enunciate가하는 일은 웹 서비스 API를위한 훌륭하고 깨끗한 통합 WSDL을 구축하는 것입니다. Enunciate는 컴파일 타임에 작동하고 모든 헤더 요소를 WSDL이 참조 할 수있는 단일 통합 XML 스키마 파일로 그룹화하려고하기 때문에 다른 WSDL 생성기와 다릅니다. (다른 WSDL 생성기는 런타임에 작동하므로 필요에 따라 스키마를 생성 할 수 있지만 XML 요소 등이 많이 중복됩니다.)

따라서 Enunciate가 "getItem"메소드를 호출 할 때 "userDetails"라는 헤더 요소를보고 해당 XML 요소를 생성중인 XML 스키마 문서에 추가합니다. 그런 다음 Enunciate는 "getItemByName"메소드를 호출하고 "userDetails"라는 또 다른 헤더 요소가 있다는 사실을 확인하고 똑같은 요소인지 확인합니다. 충돌이 있다고 생각하면 오류가 발생합니다.

내가 당신을 위해 JIRA 문제를 기록했습니다 지금은

http://jira.codehaus.org/browse/ENUNCIATE-453

, 당신이하게 발음이 당신을 위해 WSDL을 생성하는 것에 대한 관심이없는 경우에는 'XML'모듈을하게 발음을 비활성화 할 수 있습니다 :

<enunciate...> 
    ... 
    <modules> 
    <xml disabled="true"/> 
    </modules> 
</enunciate> 
+0

해당 문제가 해결되었습니다. –

+0

라이언에게 감사드립니다 ... 나는 이것을 시도 할 것입니다. – vijay

관련 문제