'rails'에 해당되는 글 1건

  1. 2008.09.19 [Rails] action web service와 각 SOAP Client간 호환성 검토 #3
반응형

[index]
action web service와 각 SOAP Client간 호환성 검토 #1 : http://alnova2.tistory.com/255
 - 1 action web service에서 http request 의 내용을 출력하도록 변경
 - 2 시험할 SOAP API 준비
 - 3 Ruby SOAP에서의 호환성
action web service와 각 SOAP Client간 호환성 검토 #2 : http://alnova2.tistory.com/256
 - 4 gSOAP에서의 호환성
 - 5 PHP nuSOAP에서의 호환성 (WSDL을 이용하지 않음)
 - 6 PHP nuSOAP에서의 호환성 (WSDL을 이용)
action web service와 각 SOAP Client간 호환성 검토 #3 : http://alnova2.tistory.com/257
 - 7 Java Axis 이용 (WSDL을 이용하지 않음)
 - 8 Java Axis 이용 (WSDL을 이용)
 - 9 결론

-----action web service와 각 SOAP Client간 호환성 검토 3편------

이번 편은 java 버전의 호환성에 대해서 확인해 보겠다.

7. Axis 이용 (WSDL을 이용하지 않음)
Axis는 java에서 SOAP 기능을 제공하기 위한 library로 많이 사용 된다고들 한다. ( http://alnova2.tistory.com/254) 참고
nuSOAP처럼 Axis도 WSDL 없이 client를 만들거나 WSDL을 가지고 Client를 만들수 있다. 7장에서는 WSDL을 사용하지 않은 client로 시험을 해보겠다.

Axis를 다운로드 받고 (시험 버전은 버젼 1.4임) class path를 추가한 다음 다음과 같은 코드를 작성한다.
[Main.java 코드]
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;

public class Main {
public static void main(String [] args) {
 try {
  String endpoint = "
http://******:3000/useful_sum/api";
  Service  service = new Service();
  Call     call    = (Call) service.createCall();
  call.setTargetEndpointAddress( new java.net.URL(endpoint) );
        call.setOperationName(new QName("
http://******/useful_sum/api", "UsefulSum"));
        call.addParameter("name", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
        call.addParameter("param0", org.apache.axis.Constants.XSD_INT, javax.xml.rpc.ParameterMode.IN);
        call.addParameter("param1", org.apache.axis.Constants.XSD_INT, javax.xml.rpc.ParameterMode.IN);
        call.setReturnType(org.apache.axis.Constants.SOAP_ARRAY);
        call.invoke( new Object[] { "1",2,3 } );

      } catch (Exception e) {
        System.err.println(e.toString());
      }
}
}

Return 타입은 bean을 생성하여 받아야 하겠지만 시험을 위하여 결과는 받지 않고 메시지만 확인한다. rails에서의 request dump는 다음과 같다.


잘 보면 HTTP_SOAPACTION이 "" 인것을 알수 있다. 역시 nuSOAP의 WSDL을 이용하지 않은 버전과 마찮가지로 rails에서는
에러가 발생한다. 이 역시 (http://alnova2.tistory.com/253) 처럼 수정하게 되면 에러 없이 처리 가능하다.

8. Axis 이용 (WSDL을 이용)
WSDL을 이용하여 Axis에서 client를 만들기 위해서는 binding class를 먼져 만들어야 한다. axis의 WSDL2Java를 이용하여 binding class를 생성한다.
[java org.apache.axis.wsdl.WSDL2Java http://********:3000/useful_sum/wsdl ] 를 console에서 입력하면 useful_sum 이라는 폴더가 생성된다.
이를 이용하여 다음의 코드를 생성한다.
[Main.java 코드]
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import useful_sum.*;
public class Main {
 public static void main(String [] args) {
  Useful_sumService service = new Useful_sumServiceLocator();
  Result result=null;
  try {
   useful_sum.Useful_sumUsefulSumPort port=service.getuseful_sumUsefulSumPort();
   result=port.usefulSum("1", 2, 3);
   System.out.println("Hello:"+result.getHello()+" result:"+result.getResult());
  } catch (ServiceException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
 }
}

실행을 해보면 rails의 request에 다음의 값들이 전달된다.

결과도 정상적으로 리턴한다.

9 결론
rails의 action web service는 nusoap의 WSDL 비이용, 그리고 axis의 WSDL 비이용 시에 예외를 발생시키고 이는 위 두가지 경우가 HTTP_SOAPACTION을 ""로 설정하기 때문에 발생한다. 실제 이건 HTTP_SOAPACTION에 대해서 엄격하게 처리할 것인지 아닌지에 따라 차이가 생기는 것으로 rails의 action web service는 엄격하게 체크한다고 봐야 할것 같다. 이 부분에 대해서 호환성을 확보하려면 이전 post (http://alnova2.tistory.com/253)를 참고하여 수정을 하면 된다.

반응형
Posted by alias
,