[원본 출처] http://cxf.apache.org/docs/how-do-i-develop-a-client.html


CXF provides you with many options to build clients for your services. This guide is meant to give you a quick overview of those options and help you orient yourself quickly with CXF.
CXF는 당신의 서비스를 위한 클라이언트를 빌드하기 위한 많은 옵션을 제공한다. 이 가이드는 당신에게 그 옵션들에 대한 빠른 개요와 CXF로 빠르게 규명짓는 것을 돕는 것을  의미한다.

Building Clients (클라이언트 빌드하기)

WSDL2Java generated Client (WSDA2Java 생성된 클라이언트)

One of the most common scenarios is that where you have a service which you may or not manage and this service has a WSDL. In this case you'll often want to generate a client from the WSDL. This provides you with a strongly typed interface by which to interact with the service. Once you've generated a client, typical usage of it will look like so:
가장 일반적인 시나리오중 하나는 어디에 당신이 관리하거나 또는 아닌 서비스를 가지고 있고 그 서비스는 WSDL을 가지고 있다. 이 경우에 당신은 종종 WSDL을 통해서 클라이언트를 생성하는 것을 원하게 될 것이다. 이는 당신이 서비스와 상호작용하는 것에 의해 강한 형식의 인터페이스를 제공한다. 한번 당신은 클라이언트를 생성한 후에 전형적인 그것의 사용예는 다음처럼 보이게 될 것이다. 

HelloService service = new HelloService();
Hello client = service.getHelloHttpPort();
 
String result = client.sayHi("Joe");

The WSDL2Java tool will generate JAX-WS clients from your WSDL. You can run WSDL2java one of three ways:
WSDL2Java 툴은 WSDL로 부터 JAX-WS 클라이언트를 생성하게 될 것이다. 당신은 3가지 방법 중에 하나로 WSDL2java 실행 할 수 있다.

For more in depth information read Developing a JAX-WS consumer or see the Hello World demos inside the distribution. 더 자세한 정보는  Developing a JAX-WS consumer 또는 배포판 안쪽에 Hello World 데모를 보라.

JAX-WS Proxy JAX-WS 프록시

Instead of using a wsdl2java-generated stub client directly, you can use Service.create to create Service instances, the following code illustrates this process:
직접 wsdl2java로 생성된 stub 클라이언트를 사용하는 것 대신에 당신은 Service.create를 Service instances를 생성하기 위해 사용할 수 있다. 

import java.net.URL;
import javax.xml.ws.Service;
...
 
URL wsdlURL = new URL("http://localhost/hello?wsdl");
QName SERVICE_NAME = new QName("http://apache.org/hello_world_soap_http", "SOAPService");
Service service = Service.create(wsdlURL, SERVICE_NAME);
Greeter client = service.getPort(Greeter.class);
String result = client.greetMe("test");

JAX-WS Dispatch APIs (JAX-WS Dispatch API들)

JAX-WS provides the "dispatch" mechanism which makes it easy to dynamically invoke services which you have not generated a client for. Using the Dispatch mechanism you can create messages (which can be JAXB objects, Source objects, or a SAAJMessage) and dispatch them to the server. A simple example might look like this:
JAX-WS 는 클라이언트를 생성하지 않고 동적으로 서비스를 호출 하는 것을 쉽게 만들기 위해 "dispatch" 매카니즘을 제공한다. Dispatch 매카니즘을 사용하여 당신은 메지를 생성할 수 있다 (JAXB 오프젝트, Source 오브젝트, 또는 SAAJMessage를 사용할 수 있고 ) 그리고 서비스에 그것들을 빨리 내보낼수 있다. 단순 에지는 이것처럼 보일지 모른다.

import java.net.URL;
import javax.xml.transform.Source;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
...
 
URL wsdlURL = new URL("http://localhost/hello?wsdl");
Service service = Service.create(wsdlURL, new QName("HelloService"));
Dispatch<Source> disp = service.createDispatch(new QName("HelloPort"), Source.class, Service.Mode.PAYLOAD);
 
Source request = new StreamSource("<hello/>")
Source response = disp.invoke(request);

NOTE: you can also use dispatches without a WSDL.
참조 : 당신은 WSDL 없이 디스패치를 사용할 수 있다.

For more in depth information see the Hello World demos inside the distribution.
더 자세한 깊은 정보는 배포판 안쪽에 Hello World 를 보라.

Simple Frontend Client Proxy (단순 프론트엔드 클라이언트 프록시)

If you've developed a service using the simple frontend, you can use the ClientProxyFactoryBean API to create a Java proxy client for your service. This way you can use the service interface to talk to your service. For more information see the Simple Frontend documentation.
만약 당신이 단순 프론트엔드를 사용하여 서비스를 개발 했다면, 당신은 서비스에 Java 프록시 클라이언트를 생성하기 위해 ClientProxyFactoryBean API를 사용할 수 있다. 이 방법은 당신이 서비스와 대화하기 위해 서비스 인터페이스를 사용한다. 더 많은 정보는 Simple Frontend 문서를 보라.

Dynamic Client (동적 클라이언트)

CXF includes a Client interface which allows you to invoke operations and pass parameters for those operations. For instance:
CXF는 당신이 동작을 호출하고 그 동작의 파라미터를 전달하는 것을 허용하는 클라이언트 인터페이스를 포함한다. 예를들면 

Client client = ....;
Object[] result = client.invoke("sayHi", "Dan");

There are two ways to create Clients at runtime. The first choice is to use the ClientFactoryBean or JaxWsClientFactoryBean classes. These will create proxy objects for the SEI for the service. These proxies cannot handle complex objects.
실시간으로 클라이언트를 생성하는 두가지 방법이 있다. 첫번째 선책은 ClientFactoryBean 이나 JaxWsClientFactoryBean 클래스를 사용 하는 것이다. 그들은 서비스의 SEI를 위한 프록시 오브젝트를 생성한다. 그 프록시들은 복잡한 오프젝트들을 핸들링 할 수 없다.

The second to use the DynamicClientFactory or one of its subclasses. The DynamicClientFactory goes the additional step of generating and compiling JAXB POJOs for complex objects described in the WSDL, for use at runtime via reflection.
두번째로 DynamicClientFactory 나 그것의 서브클래스 중에하나를 사용하는 것이다. DynamicClientFactory 는 reflection을 통해 실시간으로 사용하기 위해 WSDL로 기술된 복잡한 오브젝트 생성되고 컴파일링된 JAXB POJO들에 추가적 단계를 진행한다.

This is most useful when you're using a dynamic language such as Groovy with CXF, but it is possible to use reflection directly from Java.
이는 당신이 CXF에 동적인 언어 즉 Groovy 같은 언어를 사용할때  가장 유용하다. 그러나 그것은 Java로 부터 직접 reflection을 사용하는 것이 가능하다.

More Information: Dynamic Clients


+ Recent posts