IT한 것/webservice 7

Weblogic에서 Datahandler 첨부하는 방법

웹서비스 클라이언트는 보통 세가지 종류로 만들어진다. 사용 환경이나 목적에 따라서 Static Stub, Static Proxy, Dynamic Invocation Interface 를 사용한다. 어떤 것을 사용하던간에 jaxrpc의 Call, Service 인터페이스를 가져올 수 있는 것으로 보인다. 하여간 첨부를 하려면 해당 자료형을 변화하는 (De)Serializer가 필요하다, DataHandler에 대한 시리얼라이저는 따로 제공되지 않기 때문에, WAS에 있는 것을 사용해야한다. 시리얼라이저를 등록하기 위해서는 TypeMapping 인터페이스를 사용하면 된다. Service 인터페이스에서 TypeMappingRegistry 를 가져오고 TypeMappingRegistry에서 시리얼라이저를 QNa..

factory.createService 에서 Connot find service

위와 같은 메시지만을 보아도 확신을 가져야한다. 서비스를 찾을 수 없다는 말이다. 서비스는 Target namespace와 service name으로 찾는다. 이 두가지 값이 키가 되기 때문에 한글자라도 다른 것이 아닌가 확인해야한다. 그렇다면 뭐랑 비교 확인해야하는가? WSDL문서의 /wsdl:definitions/@targetNamespace, /wsdl:definitions/wsdl:service/@name 이다. 역시, 아무런 지식없이 시작하면 이런 간단한 것 조차 시간을 잡아먹는 요소가 된다.

AXIS에서 핸들러 등록시 발생한 ServiceException

javax.xml.rpc.ServiceException: Provider com.sun.xml.rpc.client.ServiceFactoryImpl not found 예외가 발생하고 핸들러 등록하는 위치에서는 NPE가 발생한다. 분명히 axis.jar 등을 넣으면 되는 걸로 알고 있다. Eclipse에 등록된 프로젝트에서 axis.jar 를 빼자 이 오류가 발생했기 때문이다. 그러나 현재 구성중인 ant로 구성된 환경에서는 axis.jar 를 넣어도 문제가 발생했다. 누구 문제일까?

AXIS에서 닫기태그(end-tag)가 사라질때

분명히 핸들러에서는 정상적인 메시지를 보냈음을 확인하고 return 했는데 SOAPMonitor를 보면 수십바이트의 데이터가 누락되어 닫기태그가 없다는 오류가 발생한다. 한참을 방황하다가 숫자놀이를 시작했는데, 누락된 데이터의 길이가 xml헤더의 길이와 일치하는 것이 아닌가? 그리하여 SOAPPart 객체에 setContent를 사용하는 방법에 문제가 있는 것이 아닌가를 확인하였고 원래 만들어두었던 DOMSource(Document)를 사용하던 방법을 사용하지 않고 StreamSource( InputStream )을 사용하여 Source를 만들었다. 그 결과 메지지가 누락되는 일은 발생하지 않았는데, 예상치 못하게 서버에서 정확한 응답을 해 주었다. 서버에는 변경된 소스를 적용하지 않았는데도 말이다. 일..

JAX-RPC 핸들러에서 OperationName 을 얻을 수 있는가?

표준 인터페이스를 통해서 얻는 방법이 있을까? 일단은 찾지 못했다. AXIS는 MessageContext 에서 getOperation 메서드를 제공하고, 웹로직도 비슷하게 제공한다. 그러나 결국 표준인터페이스라고 말하기는 힘들다. AXIS의 MessageContext 말고 표준 MessageContext 객체의 property를 보니까 wsdl.service 라는 이름으로 Service 객체가 삽입되어 있었다. 이 객체를 꺼내보니까 해당 서비스의 모든 OperationName을 얻어 낼 수 있었다. 그런데.. 내가 호출한 Operation이 어떤걸까? 이것만 알아내면 되는데... 불과 몇분 안지났다.. call_object 객체도 property에 들어있다. 말 그대로 Call의 인스턴스니까 맘대로 얻을..

AXIS에서 클라이언트용 JAXRPC 핸들러 만들때 유의 점.

기존에 웹로직에서 잘~ 작동하던 핸들러가 AXIS에서는 작동하지 않았다. 클라이언트건 서버건 어떠한 핸들러도 돌아가지 않았다. 신나는 구글링 끝에 개인 블로그에서 특정 메서드를 호출하면 AXIS가 핸들러를 호출하지 않는다는 내용의 글을 발견했다. 그래서 변경한 것이. ServiceFactory.createService() 메서드를 호출하던 것을 ServiceFactory.createService( URL, QName )으로, Service.createCall() 을 호출 하는 것을 Service.cretaeCall( QName )로 변경했고. Call.setPortTypeName( QName), Call.setTargetEndPointAddress( String ) 메서드를 주석처리 했다. 이렇게 하니까..

AXIS2에서 JAX-RPC

어제 종일 AXIS 1.4에서 JAX-RPC 핸들러를 써볼려고 했는데, 결국에는 실패했다. 어떤분께서 AXIS2에서 해보는건 어떠냐는 의견을 주시길레 냉큼 시도해봤다. 가볍게 설치하고 서비스를 하나 추가할까 말까 하다가 바로 핸들러를 돌려볼려고 했는데. 글쎄, 아직 지원을 안한단다.. 물론 최종버젼은 지원할 예정이라지만은.. ;; 참고는 여기서 했다.