DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9327>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9327 org.apache.axis.client.Call.invoke() not adding headers. Summary: org.apache.axis.client.Call.invoke() not adding headers. Product: Axis Version: current (nightly) Platform: All OS/Version: All Status: NEW Severity: Major Priority: Other Component: Basic Architecture AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] SUMMARY: org.apache.axis.client.Call.invoke() not adding headers. AXIS VERSION: beta2 and current (nightly) JDK VERSION: java full version "JDK-1.3.0_01-WebGain-003" HOW TO REPRODUCE: insert headers into a message, then call invoke()-- the headers do not get added to the request Envelope (reqEnv) like it does when called via the other invoke methods (the methods that get passed parameters). TESTCASE: //something like... Message msg = new Message ("<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/ \">" + "<S:Body></S:Body>" + "</S:Envelope>", false); SOAPHeader soapHeader = new SOAPHeader(); soapHeader.addChild(...); . . . call = new Call(url); //url = URL for some server to call... call.setRequestMessage(msg); call.addHeader(soapHeader); call.invoke(); // the server will not get the header... MessageContext ctx = call.getMessageContext(); respMsg = ctx.getResponseMessage(); DETAILS: In org.apache.axis.client.Call there are several invoke methods. They each add headers with code similar to the following, or by calling another invoke which has code similar to the following: //taken from... //public Object invoke( RPCElement body ) throws AxisFault { // If we have headers to insert, do so now. if (myHeaders != null) { for (int i = 0; i < myHeaders.size(); i++) { reqEnv.addHeader((SOAPHeaderElement)myHeaders.get(i)); } } ...except for invoke() with no parameters. It is missing this code, but is called by other invoke methods, so that the other methods insert the headers, but calls to invoke() (with no paramters) does not. SOLUTION: A solution would be to insert the missing code as mentioned above, BUT the code IS in the other invokes. It looks like this problem could be resolved with a little refactoring, so that all the invokes call the code, the "addHeaders" code would be called only once, and the code could probably be in a seperate method, so it only exists in one place. The invoke methods: public Object invoke(QName operationName, Object[] params) public Object invoke(Object[] params) throws java.rmi.RemoteException { public void invokeOneWay(Object[] params) { invoke( getParamList(params) ); public Object invoke(String namespace, String method, Object[] args) Object ret = invoke( body ); public Object invoke( String method, Object [] args ) throws AxisFault return invoke("", method, args); public Object invoke( RPCElement body ) throws AxisFault { // If we have headers to insert, do so now. if (myHeaders != null) { for (int i = 0; i < myHeaders.size(); i++) { reqEnv.addHeader((SOAPHeaderElement)myHeaders.get(i)); } } invoke(); public void invoke() throws AxisFault { // MISSING reqEnv.addHeader code!!!