2013-08-27 1 views
2

WSDL 파일에서 클라이언트 클래스를 생성하기 위해 항상 wsimport 도구를 사용했습니다. 그런 다음 프로젝트의 소스 트리에 포함시키고 버전 제어 시스템을 확인했습니다. 하지만 최근에 빌드 단계 (mvn clean jaxws : wsimport)로 클라이언트 클래스를 생성 할 수있는 jaxws-maven-plugin이라는 maven 용 플러그인이 있음을 알게되었습니다.JAXWS : jaxws-maven-plugin을 통해 maven 내에서 클라이언트 코드를 생성하는 이유는 무엇입니까?

WS 클라이언트 클래스를 소스 제어로 확인할 필요가 없다는 점을 제외하면이 플러그인을 사용하면 실제로 어떤 이점이 있는지 알 수는 없지만. 여전히 프로젝트에서 작업하고 싶다면 그는 코드를 체크 아웃 한 다음 mvn jaxws : wsimport를 실행 한 다음에 만 작업을 시작할 수 있습니다 (그렇지 않으면 IDE에 오류가 표시됨). 그렇다면 클라이언트 코드를 VCS로 체크인하는 대신 플러그인을 사용해야하는 실제 이점은 무엇입니까?

답변

4

빌드 단계에서 Maven 플러그인 실행이 자동으로 트리거 될 수 있습니다 (예 : 프로젝트를 컴파일하기 바로 전에 빌드주기에 "소스 생성"단계가 있습니다. 따라서 개발자는 수동으로 생성하여 이상적인 원 클릭 전체 빌드에 가깝게 만들 것을 기억할 필요가 없습니다.

생성 된 클래스를 필요에 따라 다시 생성 할 수 있으므로 생성 된 클래스를 VCS에서 제외 할 수 있다는 이점이 있습니다. VCS에서 생성 된 코드의 문제점은 WSDL 파일을 변경하면 생성 된 코드가 변경된다는 것입니다 (분명히). 그러나 먼저 계약을 체결하면 WSDL 파일의 변경 사항 만 관련됩니다. VCS에서 생성 된 코드를 제외하면 VCS 커밋 로그에서 중복 된 내용이 숨겨집니다. VCS 저장소가 작고 커밋 로그가 더 깨끗합니다. 서비스 인터페이스에 대한 클라이언트 클래스의

1) 호환성 :이 시나리오에 대한 두 가지 견해가 이럴 : 코멘트위한

편집.

클라이언트 클래스가 이전 wsdl에서 생성 된 WS와 통신 할 수 있는지 확실하지 않습니다. 변화가 추가 방법으로 제한되고 기존 정의를 만지지 않으면 수 있습니다 작품 생각합니다. 그럼에도 불구하고 클라이언트 코드가 빌드에서 항상 재생성되면 클라이언트 코드가 wsdl과 자동으로 동기화되기 때문에 이것은 문제가되지 않습니다.

2) 구현과 클라이언트 클래스의 호환성.

수정 된 wsdl로 인해 생성 된 클라이언트 클래스가 변경되면 클라이언트 클래스를 사용하는 코드가 중단 될 수 있습니다. 그러나 wsdl에 추가 된 메소드 만있는 경우 기존 메소드가있는 그대로두면 재생성 된 클라이언트 클래스가 결과적으로 기존 코드와 역 호환 될 수 있어야합니다. 예제에서 : 코드가 A() 만 사용하고 "새로운"클라이언트 클래스가 A()에 B() 을 추가로 제공하면 코드는 여전히 작동해야합니다.

요약하면; VCS에서 생성 된 클라이언트 코드를 제외하고, 빌드 프로세스의 일부로 요구에 따라 생성하는 대신, WSDL이 하위 호환 가능하다면 기존의 기능 코드를 손상시키지 않아야합니다. WSDL 변경 사항이 이전 버전과 호환되지 않으면 컴파일 타임에 오류가 발생합니다. 하지만 VCS의 오래된 클라이언트 클래스를 사용하면 실제로 응용 프로그램을 실행하려고 시도 할 때까지 이러한 오류를 숨길 수 있습니다.

+0

그래서 wsdl에서 사용하려는 A() 메소드를 정의한다고 가정 해 보겠습니다. 클라이언트 클래스를 생성하고 코드를 개발 한 다음 VCS에 모든 것을 체크인합니다. 그 동안 wsdl이 변경되고 B()가 추가 된 새로운 메소드가 있습니다. 그렇다면 새로운 클라이언트 클래스를 생성하고 체크인해야합니다. 그렇지 않으면 A() 만 사용하더라도 코드가 작동하지 않습니다. – Janek

관련 문제