I found a much easier way to do this by making only a minor modification to org.apache.axis.client.Call.java.

I added a new property:

public static final String CHARACTER_SET_ENCODING = SOAPMessage.CHARACTER_SET_ENCODING;

and made the appropriate changes in the property checking code.
Then in invoke(SOAPEnvelope), it sets the message CHARACTER_SET_ENCODING to the one set in the Call.


if (getProperty(CHARACTER_SET_ENCODING) != null) {
msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, getProperty(CHARACTER_SET_ENCODING));
}




Here's the 'diff -u' for Call.java (for 1.2RC2):

--- Call.java Tue Nov 16 13:04:43 2004
+++ /Users/bernard/src/jiveall/liveforum/WEB-INF/classes/org/apache/axis/ client/Call.java Fri Nov 19 09:24:19 2004
@@ -113,6 +113,8 @@
* TIMEOUT - Timeout used by transport sender in milliseconds
* TRANSPORT_NAME - Name of transport handler to use
* ATTACHMENT_ENCAPSULATION_FORMAT- Send attachments as MIME the default, or DIME.
+ * CHARACTER_SET_ENCODING - Character set encoding to use for request
+ *
* </pre>
*
* @author Doug Davis ([EMAIL PROTECTED])
@@ -183,6 +185,13 @@
public static final String TRANSPORT_NAME = "transport_name" ;


/**
+ * This is the character set encoding to use for the message
+ *
+ * @see #setProperty
+ */
+ public static final String CHARACTER_SET_ENCODING = SOAPMessage.CHARACTER_SET_ENCODING;
+
+ /**
* This is not the name of a property that can be set with
* setProperty, despite its name.
*/
@@ -440,6 +449,9 @@
verifyBooleanProperty(name, value);
setStreaming(((Boolean) value).booleanValue());
}
+ else if (name.equals(CHARACTER_SET_ENCODING)) {
+ verifyStringProperty(name, value);
+ }
else if (name.startsWith("java.") || name.startsWith("javax.")) {
throw new JAXRPCException(
Messages.getMessage("badProp05", name));
@@ -544,6 +556,7 @@
propertyNames.add(TRANSPORT_NAME);
propertyNames.add(ATTACHMENT_ENCAPSULATION_FORMAT);
propertyNames.add(CONNECTION_TIMEOUT_PROPERTY);
+ propertyNames.add(CHARACTER_SET_ENCODING);
}


     public Iterator getPropertyNames() {
@@ -1849,7 +1862,10 @@
             Message msg = null ;

msg = new Message( env );
- if (msgContext.getProperty(SOAPMessage.CHARACTER_SET_ENCODING) != null) {
+ if (getProperty(CHARACTER_SET_ENCODING) != null) {
+ msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, getProperty(CHARACTER_SET_ENCODING));
+ }
+ else if (msgContext.getProperty(SOAPMessage.CHARACTER_SET_ENCODING) != null) {
msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, msgContext.getProperty(SOAPMessage.CHARACTER_SET_ENCODING));
}
setRequestMessage( msg );



I'm new to the Axis project group. Is there an appropriate way to submit this for insertion into the project? Perhaps there is a better way to do this that I haven't heard of yet, but I haven't found one yet. This code will make it possible to set the Character encoding to anything when making the Call.


To use it, you'd just use the setProperty() method to set the Call.CHARACTER_SET_ENCODING property to whatever character encoding you want before invoking the call.

eg:

call.setProperty(Call.CHARACTER_SET_ENCODING, "ISO-8859-1");



Bernie



On Nov 17, 2004, at 4:21 PM, Bernie Bernstein wrote:
I managed to do it by copy/pasting some code from org.apache.axis.client.Call.

It wasn't easy, but it involved creating a new Message object, setting it's char encoding to "ISO-8859-1", and then assembling the envelope to send to Call.


On Nov 17, 2004, at 12:39 PM, Peuclid wrote:
So, just to start, I'm trying to get my test client to request the data in ISO-8859-1 just to see what happens when I change the global "axis.xmlEncoding" to ISO-8859-1. So far, that doesn't seem to be changing the default anywhere. Looking at the AxisServlet code, I see that the encoding is set by the request.

So, now I need to figure out how to set the encoding of the request.




Reply via email to