0

我的网络服务中有以下代码

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;
    }
}

我想知道如何在我的 java 客户端中设置不同的语言环境值,以便上面提到的 web 服务代码能够识别它。

目前只有“en”被识别。

4

1 回答 1

0

以下代码可用于在客户端的 SOAP 标头中设置区域设置

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);

并且为了在服务器端检索语言环境,使用以下代码

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";
}

我已经对示例 web 服务和 web 服务客户端进行了同样的尝试,并且它可以工作。

于 2012-07-09T19:54:00.080 回答