[SPRING] Apache CXF + Spring : 간단한 클라이언트 생성
SPRINGApache CXF + Spring : 간단한 클라이언트 생성
나는 Spring에서 Apache CXF를 배우기 시작했다. 우선, 나는 간단한 클라이언트 / 서버 모델을 만들려고 노력했다.
서버 쪽 : service.HelloWorld.java
@WebService
public interface HelloWorld {
String sayHi(String text);
}
service.HelloWorldImpl.java
@WebService(endpointInterface = "service.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
return "Hello, " + text;
}
}
클라이언트 측은 다음과 같습니다. client.Client.java public class Client {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"cxf-client-servlet.xml"});
HelloWorld client = (HelloWorld) context.getBean("client");
System.out.println(client.sayHi("Batman"));
}
}
cxf-client-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schema/jaxws.xsd">
<bean id="client" class="service.HelloWorld" factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="service.HelloWorld"/>
<property name="address" value="http://localhost:8080/services/HelloWorld"/>
</bean>
문제는 클라이언트 작동을 위해 service.HelloWorld (package + interface)를 클라이언트 프로젝트에 추가해야한다는 것입니다. 서비스를 사용하기 전에 스텁을 생성해야한다고 들었습니다. 그래서 나에게 혼란 스럽다. 그래서 올바른 접근법과 최선의 실행 방법은 무엇입니까? (계약 우선 접근법 등을 사용하는 것이 더 좋을 수 있습니다)? 나중에 WS-Security를 추가하고 싶습니다. 강력한 배경이 필요합니다 =)
미리 감사드립니다.
해결법
-
==============================
1.코드 우선 WS 개발을한다면 인터페이스를 배포하고 클라이언트에게 제공하는 것이 좋습니다. 나는 @WebService가 인터페이스 (단지 구현)에 필요하지 않다고 (?) 믿는다. 그래서 클라이언트는이 주석에 의존하지 않는다.
코드 우선 WS 개발을한다면 인터페이스를 배포하고 클라이언트에게 제공하는 것이 좋습니다. 나는 @WebService가 인터페이스 (단지 구현)에 필요하지 않다고 (?) 믿는다. 그래서 클라이언트는이 주석에 의존하지 않는다.
코드 우선 웹 서비스를 수행하는 경우에도 Apache CXF에서 생성 한 WSDL 문서를 다운로드하여 대신 클라이언트에 제공 할 수 있습니다. 이 접근법 (.NET과 같은 다른 플랫폼에서 사용될 수 있음은 물론 더 성숙한 것으로 간주 됨)을 사용하여 클라이언트는 (wsdl2java와 같은 도구를 사용하여) 스텁을 생성해야합니다. 이 프로세스는 기본적으로 매우 유사한 클라이언트 인터페이스를 자동으로 생성합니다.
이는 많은 사람들이 계약 우선 개발을 선호하는 이유 중 하나입니다. 동일한 WSDL이 클라이언트 측 스텁 및 서버 측 WS 구현을 생성하는 데 사용됩니다. 이것은 (우발적 인) 비 호환성의 범위를 제한합니다.
-
==============================
2.클라이언트 측에서 이와 같이 간단한 스프링 구성을 사용할 수 있습니다.
클라이언트 측에서 이와 같이 간단한 스프링 구성을 사용할 수 있습니다.
<jaxws:client id="mywebServiceClient" serviceClass="com.saurzcode.TestService" address="http://saurzcode.com:8088/mockTestService"> <jaxws:binding> <soap:soapBinding version="1.2" mtomEnabled="true" /> </jaxws:binding> </jaxws:client> <cxf:bus> <cxf:outInterceptors> <bean class="com.saurzcode.ws.caller.SoapHeaderInterceptor" /> </cxf:outInterceptors> </cxf:bus>
인터셉터가 필요 없다면 무시하십시오.
이 게시물에 대한 자세한 내용.
from https://stackoverflow.com/questions/9032960/apache-cxf-spring-generating-a-simple-client by cc-by-sa and MIT license