0

I have the following code in my webservice

package com.manumehrotra.hs.samples.internationalization;

import java.util.MissingResourceException;

import javax.servlet.http.HttpServletRequest;

import org.apache.axis2.context.MessageContext;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.transport.http.HTTPConstants;

public class SampleInternationalizationHS {
    public String getInternationalizedMessage(){
        System.out.println("in getInternationalizedMessage");
        String retVal = null;
        String language = null;

        // Get the current MessageContext  
        MessageContext msgContext = MessageContext.getCurrentMessageContext();
        // Get HttpServletRequest from Message Context  
        Object requestProperty = msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
        if (requestProperty != null  && requestProperty instanceof HttpServletRequest) {      
            HttpServletRequest request = (HttpServletRequest) requestProperty;  
            language = request.getLocale().getLanguage();  
            // language codes are available at - http://www.loc.gov/standards/iso639-2/php/code_list.php
        }

        System.out.println(language);

        String msg_key = "samplemsg_en";
        try {
            msg_key = "samplemsg_"+language;
        } catch (Exception e) {
            msg_key = "samplemsg_en";
        }

        System.out.println(msg_key);

        try {
            retVal = Messages.getMessage(msg_key, "Jack");
        } catch (MissingResourceException mre) {
            // do nothing...
            System.out.println("resource not found");
        }
        System.out.println("returning "+retVal);
        return retVal;
    }
}

I want to know how to set different locale values in my java client so that the webservice code mentioned above recognizes it.

Currently only "en" is being recognized.

Manav
  • 259
  • 6
  • 20

1 Answers1

0

Following code can be used to set locale in SOAP headers at the client

ServiceClient client = stub._getServiceClient();
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMElement omElement = omFactory.createOMElement(new QName("http://www.w3.org/2005/09/ws-i18n","locale", "i18n"));
omElement.setText("en");
client.addHeader(omElement);

and for retrieving locale on server side the following code is used

SOAPHeader header = MessageContext.getCurrentMessageContext().getEnvelope().getHeader();
OMElement firstChildWithName = header.getFirstChildWithName(new QName("http://www.w3.org/2005/09/ws-i18n","locale","i18n"));
if (firstChildWithName != null) {
    String locale = firstChildWithName.getText();
    System.out.println(locale);
    if(locale!=null)
        language = locale.trim();
    else
        language="en";
}

I have tried the same with a sample webservice and webservice client and it works.

Manav
  • 259
  • 6
  • 20