2012-05-19 3 views
3

Enum은 유형 안전성이 뛰어나며 코드를 훨씬 쉽게 읽을 수 있습니다. 나는 항상 기회를 얻을 때마다 Enum을 사용합니다.Java XML Web Services에서 Enum 방지

이러한 코드를 웹 서비스로 노출해야하는 경우 문제가 발생했습니다. 예를 들어,이 같은 열거가있는 경우 :

public enum Language { 
    ENGLISH(1), 
    BAHASA_MALAYSIA(2); 
} 

그것은이 같은 WSDL에 노출됩니다

<xs:simpleType name="language"> 
<xs:restriction base="xs:string"> 
    <xs:enumeration value="ENGLISH"/> 
    <xs:enumeration value="BAHASA_MALAYSIA"/> 
    </xs:restriction> 
</xs:simpleType> 

나는에있을 것입니다 새로운 언어를 추가하기로 결정하면 미래의 경우 문제가 발생하면 wsdl 파일이 달라서 이전 클라이언트가 중단됩니다.

내 질문에 열거 형 wsdl로 노출되는 것을 방지하려면 어떻게합니까? 간단한 데이터 형식 (String 또는 int)으로 노출되기를 원합니다.

해당하는 경우 JBoss WS을 사용하고 있습니다.

+0

어떤 웹 서비스 프레임 워크를 사용하고 있습니까? – skaffman

+0

중요합니까? JBoss WS를 사용 중입니다. –

+0

예, 중요합니다. 그래서 내가 물었다. – skaffman

답변

6

미래에 새로운 언어를 추가하기로 결정하면 wsdl 파일이 달라져서 이전 클라이언트가 중단됩니다.

아니요, 오래된 클라이언트를 손상시키지 않습니다. 열거 형에 값을 추가하는 것은 이전 버전과의 호환성 변경으로 간주 될 수 있습니다. Extensibility, XML Vocabularies, and XML Schema과 같은 기사를 참조하십시오.

JBoss WS가 WSDL과 XSD를 생성하도록 사용자의 작업 코드를 추측하고 있습니다. 거기에 아무런 문제가 없습니다. 그러나 역방향 및 전방 호환성이 큰 문제라면 먼저 계약을해야합니다 (예 : WSDL 및 XSD를 수동으로 설계). WSDL과 XSD의 새로운 버전의 JBossWS가 어떻게 생겼는지 결코 알 수 없기 때문입니다.

실제로 JBoss-WS가 다른 것으로 생성하려면 JAX-B를 조사해야합니다. JAX-B는 실제 XSD 세대가하는 일입니다.

+0

+1 for contract-first – skaffman

+0

예 실제로 코드를 먼저 작성한 다음 JBoss WS에서 WSDL을 생성하도록합니다. 생각 해보니 당신의 대답은 완벽합니다 ... 나는 이것을 시험 해봐야합니다. –

+0

이 상황에서 계약 우선 도움이되는 방법을 이해하는 데 문제가 있습니다. 결과 WSDL 파일에 열거 형이 포함되어 있으면 새로운 값이 열거 형에 추가되면 구식 클라이언트가 중단되는 것과 동일한 문제가 여전히 남아 있습니까? 아니면 WSDL의 열거 유형으로 정의하지 않고 대신 표준 문자열을 사용합니까? – craigrs84

관련 문제