웹 서비스가 포함 된 OSGi 번들 인 maven 프로젝트를 빌드하려고합니다. 모든 @WebService
주석이있는 JAX-WS를 사용하여 내가 가지고있는 웹 서비스를 지정합니다. 클라이언트 위치에서 이러한 웹 서비스를로드하려면 일반적으로 WSDL 파일을 내보내거나 가져 오는 데 wsgen
및 wsimport
을 사용합니다. jaxws-maven-plugin을 사용하려고하지만 여기에 문제가 있습니다.동일한 메이븐 프로젝트에서 웹 서비스 생성 및 사용
번들은 동시에 서버와 클라이언트로 작동 할 수 있습니다. 동일한 번들 (다른 JVM/호스트에서 실행 중)의 상위 노드에 클라이언트로 등록 될 수 있습니다. 따라서이 프로젝트/번들은 웹 서비스를위한 인터페이스를 정의하고이 인터페이스를 구현하는 구현 클래스를 정의합니다. 인터페이스와 클래스 모두 보통 때와 마찬가지로 @WebService
주석을 사용합니다. 어딘가에 내 코드에서 다음
@WebService
public interface Example {
public void callMe();
}
@WebService
public class ExampleImpl implements Example {
public void callMe() {};
}
그리고 :
Endpoint p = Endpoint.publish(
"http://localhost:8080/example",
new ExampleImpl());
jaxws:wsgen goal는 주석을 읽고 구성에 따라 출력 파일 (class 파일, java 파일, WSDL 파일을 만들 ...). 그러나 목표에서 동일한 파일 mvn package
을 실행하는 동안이 파일을 어떻게 사용합니까? 같은 받는다는 프로젝트에서 나는이 웹 서비스를 사용하려면, 그래서 내가 이런 걸 쓸 필요는 컴파일 된 클래스를 읽을 필요가 같이 jaxws:gen
목표는 process-classes
단계에서 실행
ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();
port.callMe();
,하지만 jaxws:import
이어야합니다 컴파일을 위해 모든 것을 준비하기 위해 generate-sources
단계에서 실행하십시오. 그리고 지금 나는 닭고기 달걀 문제로 달린다. wsgen
을 통해 출력 파일을 생성하기 위해 컴파일 된 클래스가 필요하지만, 의 출력 파일은 wsgen
이고, 출력은 generate-sources
maven입니다. 내 첫 번째 시도는 목표를 generate-sources
단계에도 할당하는 것이었지만 물론 클래스가 작동하지 않으므로 아직 누락되었거나 아직 컴파일되지 않았습니다.
이 문제를 해결하기위한 나의 대안은 무엇입니까? 내가 그렇게 jaxws:wsgen
(즉 단계에서) 사용할 수있는 generate-sources
단계 이전 일부 클래스합니다 (@WebService
주석, 즉 클래스 만) 컴파일하는 antrun
목표를 실행하는 경우, 다음 generate-sources
에 jaxws:wsimport
에서 사용하는 출력 파일을 생성 단계? 이 닭고기 달걀 문제를 해결할 다른 방법이 있습니까? 같은 메이븐 프로젝트에서 웹 서비스의 서버와 클라이언트 부분을 컴파일하기위한 다른 "방법"이 있습니까? 그것은 btw해야합니다. 깨끗한 mvn clean
빌드에서 실행되므로 "mvn package
을 두 번 실행하여 webservices 파일을 생성 한 다음 다른 모든 것을 컴파일하는 것과 같은 솔루션을 원하거나 원하지 않습니다." 즉, mvn clean package
은 전체 maven 프로젝트/osgi 번들을 컴파일해야합니다.
다른의 솔루션을 다음과 같이 보인다. 그러나 이것이 내 프로젝트에서의 경우이기 때문에, 스텁은'generate-source' 단계보다 나중에 생성되어서는 안됩니다. – Progman