2010-01-23 2 views
1

webservice 용 클라이언트 코드를 생성하기 위해 wsdl2java를 사용하여 Apache Axis 1.4 (예, 이전 버전)를 사용하고 있습니다. 생성 된 스텁에서 메서드를 호출하기 전에 Call 개체에 대한 추가 속성을 설정하고 싶습니다.Apache Axis : wsdl2java에서 생성 된 코드를 사용하여 호출 속성을 설정하는 방법?

예를 들어 사용자 이름, 암호를 설정하고 기존 헤더를 추가 또는 수정하고 클라이언트 구현자가 다른 구현을 사용하도록 변경하고 싶습니다.

현재 생성 된 Stub 클래스를 수정하고 적절한 setter를 호출하여이 작업을 수행하고 있습니다. 그러나 생성 된 파일을 건드리지 않고이 작업을 수행하고 싶습니다. . 내가 생성 된 소스 코드를 수정하고있어 어디

호출 객체를 생성하고 몇 가지 속성을 설정
createCall() 

현재이되고, 그런 다음 스텁이 포함 스텁 클래스가 가지고 있기 때문에 나는 "하지만, 혼란 M :

clientMethod1(){ 
    blahblah 
    Call _call = createCall(); 
    ...... 
    _call.invoke(); 
} 

그래서 내가 수정하려는 속성을 수정, 내가 스텁을 얻기 위해 serviceLocator를 사용할 수있는 방법을 볼 수 없습니다, 다음 주어진, 내가 호출 할 메소드를 호출 스텁을 사용하여 스텁 메서드는 createCall()을 호출하고 invoke를 호출합니다. 호출되기 전에 새 Call 객체를 가로채는 방법이 나타나지 않습니다.

So : 생성 된 스텁 클래스의 소스 코드를 수정하지 않고 호출에서 속성을 어떻게 수정합니까?

정보를 주셔서 감사합니다. 또는 기존 문서를 참조하십시오.

+1

내가 설정 등록의 목적으로 스텁에 내 스텁 구현 객체를 upcasting에 의해 거의 내가 원하는 걸 할 수있는 것 같은데 재정의 createCall 방법에 속성을 설정할 수 있습니다 : ServiceLocator 로케이터 = 새로운 ServiceLocator (....); myObj = locator.getMyObj(); ((스텁) myObj) .setUsername (...); 등. 선호하는 방법입니까? –

답변

0

너무 생성 된 코드를 건드리고 싶지 않습니다. 위험은 내가 일단 그것을 재생성하고 편집을 풀어야한다는 것입니다.

축 세부 정보를 모르는 경우 - 스텁을 서브 클래스 화하고 'createCall'을 재정의 할 수 없습니까? 축이 서브 클래스를 만지지되며

+0

Andreas, 좋은 생각. 네가 제안한대로 할 수있어. 그러나, 나는 단점이 있다고 생각한다. 스텁을 직접 인스턴스화해야하는데, 축에서 "frowned"된다. 일반적으로 "ServiceLocator"에서 스텁을 가져옵니다. 그리고 hocum을 수행 한 다음 스텁을 리턴합니다. 나는 항상 servicelocator가 제공하는 얼마나 많은 가치를 궁금해했습니다. 어쩌면 그것을 탐색하고, 잠재적으로 하위 클래스를 인스턴스화 할 시간입니다. –