Apache SOAP를 사용하여 개발된 웹 서비스를, Java™
EE(Java Platform, Enterprise Edition)용
웹 서비스 스펙에 기반하여 개발된 JAX-RPC(Java
API for XML-based RPC) 웹 서비스로 마이그레이션할 수 있습니다.
시작하기 전에
Apache SOAP에 기반하여 웹 서비스를 사용했고, 현재 Java에 기반하여
웹 서비스를 개발 및 구현하려는 경우, 5.0.2 버전 이전의 모든 4.0 및
5.0 버전으로 개발된 클라이언트 애플리케이션을 마이그레이션할 필요가 있습니다.
이 태스크 정보
Apache SOAP 구현을 기반으로 하는 SOAP 보안(XML 디지털 서명)이 제거되었습니다. SOAP 보안을 사용하는 대신, 애플리케이션을
웹 서비스의 JSR-109 구현으로 마이그레이션하고 다시
구성하십시오.
Java
표준에 따라 이러한 클라이언트 애플리케이션을 마이그레이션하려면 다음을 수행하십시오.
프로시저
- 마이그레이션 계획을 수립하십시오. 두 가지 방법 중 하나로 Apache SOAP 클라이언트를
JAX-RPC 웹 서비스 클라이언트에 포트할 수 있습니다.
JAX-RPC가 사용자 작성 직렬화 프로그램을 위한 프레임워크를 지정하지 않으므로
JAX-RPC가 사용자 정의 직렬화 프로그램의 사용을 지원하지 않습니다. 애플리케이션이 WebSphere® 애플리케이션 서버가 지원하는 Java, WSDL 및 XML 기술 사이의
기본 맵핑을 준수할 수 없는 경우, 애플리케이션을 마이그레이션하려 시도하지 마십시오. 이 주제의 나머지는 사용자가 JAX-RPC DII API를 사용할 것을
결정했다고 가정합니다.
- GetQuote 샘플을 검토하십시오. Information Center의 샘플 섹션에서 웹 서비스 마이그레이션 샘플을 사용할 수 있습니다.
이 샘플은 원래 Apache SOAP 사용자용으로 작성된 GetQuote.java 파일에 있으며,
JAX-RPC DII 인터페이스로 마이그레이션하는 데 필요한 변경사항에 대한 설명을 포함하고 있습니다.
자세히 학습하려면 Information Center의 샘플 섹션을 참조하십시오.
- 클라이언트 애플리케이션을 Apache SOAP에서 JAX-RPC DII로 변환하십시오. Apache SOAP API와 JAX-RPC DII API 구조는 비슷합니다. 두 API 모두에서
호출 오브젝트를 인스턴스화 및 구성하고, 매개변수를 설정하고,
조작을 호출하고, 그 결과를 처리할 수 있습니다. 다음 명령으로
Service 오브젝트의 일반 인스턴스를 작성할 수 있습니다.
javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
의 특성에 의해 설정됩니다. - 호출 오브젝트를 작성하십시오. Apache SOAP의 다음 코드를 사용하여 호출 오브젝트의 인스턴스가 작성됩니다.
org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
에
의해 호출 오브젝트에 구성됩니다.
JAX-RPC의 다음 코드로 호출 오브젝트의 인스턴스가 작성됩니다.
java.xml.rpc.Call call = service.createCall();
의 특성에 의해 설정됩니다.
- 엔드포인트 URI(Uniform Resource Identifier)를 설정하십시오. 조작에 대한 대상 URI가 Apache SOAP의
call.invoke: call.invoke("http://...", "");
에
매개변수로 전달됩니다. setTargetEndpointAddress 메소드가
JAX-RPC의
call.setTargetEndpointAddress("http://...");
의 특성에 의해 설정됩니다.
Apache
SOAP는 요청에 대한 라우팅 정보를 포함하는 호출 오브젝트에
setTargetObjectURI 메소드를 갖습니다. JAX-RPC는 동등한 메소드가 없습니다. JAX-RPC의 경우에
targetObjectURI의 정보는 targetEndpoint URI에 포함됩니다.
- 조작 이름을 설정하십시오. Apache SOUP에서 조작 이름은
call.setMethodName("opName");
에
매개변수로 전달됩니다. 다음 예에 설명된 대로 JAX-RPC에서는
String
매개변수 대신
QName을 승인하는 setOperationName 메소드가
사용됩니다.
call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
- 인코딩 양식을 설정하십시오. Apache SOAP에서 인코딩 양식은
call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
에
의해 호출 오브젝트에 구성됩니다.
인코딩 양식은 JAX-RPC에서 호출 오브젝트
call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
xmlsoap.org/soap/encoding/");
의 특성에 의해 설정됩니다.
- 매개변수를 선언하고 매개변수 값을 설정하십시오. Apache
SOAP 매개변수 유형과 값은 벡터로 수집되고 호출 전에
호출 오브젝트에 설정되는 매개변수 인스턴스에 의해 설명됩니다.
예를 들면,
Vector params = new Vector ();
params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI));
// repeat for additional parameters...
call.setParams (params);
JAX-RPC의
경우, 호출 오브젝트는 매개변수 값을 제공하지 않고 매개변수 이름과 유형으로
구성됩니다. 예를 들면,
call.addParameter(name, xmlType, mode);
// repeat for additional parameters
call.setReturnType(type);
여기서,
- name(유형 java.lang.String)은 매개변수 이름입니다.
- xmlType(유형 javax.xml.namespace.QName)은 매개변수의
XML 유형입니다.
- mode(유형 javax.xml.rpc.ParameterMode)는 매개변수의
모드입니다(예: IN, OUT 또는 INOUT).
- 호출을 작성하십시오. Apache SOAP에서 조작은
org.apache.soap.Response resp = call.invoke(endpointURI, "");
에
의해 호출 오브젝트에 구성됩니다.
매개변수 값은 다음 예에 설명된 대로 배열에 수집되고
call.invoke로 전달됩니다.
Object resp = call.invoke(new Object[] {parm1, parm2,...});
의 특성에 의해 설정됩니다.
- 결함이 있는지 검사하십시오. Apache SOAP에서 응답을 확인하여 호출의 SOAP 결함을 점검할 수 있습니다.
if resp.generatedFault then {
org.apache.soap.Fault f = resp.getFault;
f.getFaultCode();
f.getFaultString();
}
에
의해 호출 오브젝트에 구성됩니다.
호출에서 SOAP 결함이 발생하는 경우
java.rmi.RemoteException 오류가 JAX-RPC에 표시됩니다.
try {
... call.invoke(...)
} catch (java.rmi.RemoteException) ...
- 결과를 검색하십시오. Apache SOAP에서는, 호출이 성공하고
결과를 리턴하는 경우 Response 오브젝트에서
검색할 수 있습니다.
Parameter result = resp.getReturnValue(); return result.getValue();
JAX-RPC에서는,
예외가 표시되지 않을 때 호출 결과가 리턴된
오브젝트입니다.
Object result = call.invoke(...);
...
return result;
결과
Apache SOAP 웹 서비스를 Java EE
스펙에 기반한 JAX-RPC 웹 서비스로 마이그레이션했습니다.
다음에 수행할 작업
Java
EE용 웹 서비스 스펙에 기반한 웹 서비스 클라이언트 개발하십시오.
웹 서비스 가능 클라이언트를
테스트하여 마이그레이션 프로세스가 성공했는지와 Java EE
환경에서 웹 서비스를 구현할 수 있는지 확인하십시오.