package com.nortal.jroad.endpoint.helper;
import java.lang.reflect.Method;
import javax.xml.rpc.Service;
import org.apache.axis.MessageContext;
import org.apache.axis.client.Call;
import org.apache.axis.client.Stub;
import org.springframework.beans.factory.InitializingBean;
/**
* Plumbing to make axis marshalling work.
*
* @author Dmitri Danilkin
*/
public class AxisContextHelper implements InitializingBean {
private final Class<? extends Stub> stubClass;
private MessageContext messageContext;
public AxisContextHelper(Class<? extends Stub> stubClass) {
this.stubClass = stubClass;
}
public void afterPropertiesSet() throws Exception {
Stub stub = stubClass.getConstructor(Service.class).newInstance(new Object[] { null });
for (Method m : stub.getClass().getDeclaredMethods()) {
if (m.getName().equals("createCall")) {
m.setAccessible(true);
messageContext = ((Call) m.invoke(stub)).getMessageContext();
break;
}
}
if (messageContext == null) {
throw new IllegalStateException("Could not find the createCall() method in the stub supplied!");
}
}
public MessageContext getMessageContext() {
return messageContext;
}
}