Hi Sorry for a delay. Just create a custom JAXRS MessageBodyReader (have a look at the existing FormEncodingProvider) which implements readFrom (reads the body from InputStream and splits the name=value pairs). At the moment "UTF-8" is used to read the stream but I suspect that the sequence which SoapUI sends is not UTF-8 encoded. So you need to check the "charset" parameter of the provided MediaType and use UTF-8 by default...
cheers, Sergey On Thu, Jun 24, 2010 at 5:14 PM, Loh Kok Jeng <[email protected]> wrote: > Hi Sergey, > > Can u point me to where to get info on creating a custom FormProvider? > What is the workaround? > > Thanks. > > regards, > Loh Kok Jeng > > > > On 24 June 2010 23:16, Sergey Beryozkin <[email protected]> wrote: > > Hi - indeed, there's a bug in the CXF JAXRS FormProvider in that it > ignores > > the encoding of the incoming ContentType - I'll try to fix it these > > weekends; a custom FormProvider can be easily created as well as a > > workaround > > > > cheers, Sergey > > > > On Thu, Jun 24, 2010 at 4:14 PM, Ron Grimes <[email protected]> > wrote: > > > >> I think I may have found the answer. See > >> http://java.sun.com/docs/books/tutorial/i18n/text/string.html ). > >> > >> Here, they talk about how it is incorrect to load a string value into a > >> bytes array without specifying the encoding. Notice, in their example, > that > >> the difference in > >> > >> byte[] bytes = utfEightString.getBytes(); \\ bad > >> byte[] bytes = utfEightString.getBytes("UTF8"); \\ good > >> > >> will produce a different number of byte elements. Essentially, your loop > is > >> doing the same thing. For a five characters string, you will always end > up > >> with a 5 element byte array, when it might have given you an 8 byte > array, > >> had you specified the encoding. > >> > >> Instead, you should do this: > >> > >> byte[] bytes = utfEightString.getBytes("UTF8"); > >> return new String(bytes, "UTF8"); > >> > >> > >> Ron Grimes > >> > >> > >> > >> > >> -----Original Message----- > >> From: Loh Kok Jeng [mailto:[email protected]] > >> Sent: Wednesday, June 23, 2010 7:11 PM > >> To: [email protected] > >> Subject: Re: UTF-8 Characters in Request Params for REST Service > >> > >> Hi Sergey, > >> > >> This is for form based submission. > >> > >> Below is a snippet of my code. I want to be able to accept non-ASCII > >> characters in "message" parameter below. However, when I tested with > >> Chinese characters, they are converted to "?" as shown in my logs. > >> > >> Any help will be very much appreciated. > >> > >> @POST > >> // @Consumes("application/x-www-form-urlencoded") > >> public SMSSendSmsResponse sendSms(@HeaderParam("Authorization") > >> String authorization, > >> @Context MessageContext mc, > >> @FormParam("address") List<String> address, > >> @FormParam("message") String > message, > >> @FormParam("notifyURL") String > >> notifyURL, > >> @FormParam("correlator") String > >> correlator, > >> @FormParam("senderName") String > >> senderName, > >> @FormParam("Charging") String > >> Charging) > >> throws MalformedURLException, PolicyException, ServiceException > { > >> > >> if (address != null) { > >> for (Iterator<String> i = address.iterator(); i.hasNext();) { > >> log.info("Address: " + i.next()); > >> } > >> } > >> log.info("Message: " + message); > >> log.info("Notify URL: " + notifyURL); > >> log.info("Correlator: " + correlator); > >> log.info("Sender Name: " + senderName); > >> log.info("Charging: " + Charging); > >> > >> .... > >> > >> } > >> regards, > >> Loh Kok Jeng > >> > >> > >> > >> On 24 June 2010 02:00, Sergey Beryozkin <[email protected]> wrote: > >> > I need to know the details of the request and how a resource method > >> > expecting the values looks like > >> > > >> > thanks, Sergey > >> > > >> > On Tue, Jun 22, 2010 at 7:10 PM, Rakesh Rai <[email protected]> > wrote: > >> > > >> >> This is the method that does the trick.... converts to UTF-8 and > >> transforms > >> >> to UTF-8 format string and sends it back to the caller > >> >> Wherever in your service class / action class add this method and > >> convert > >> >> the existing string to return the UTF-8 transformed string / text > >> >> /** > >> >> * > >> >> * @param utfEightString > >> >> * @return String converted to USF-8 format and send it to the > caller > >> . > >> >> * @throws java.io. > >> >> UnsupportedEncodingException > >> >> */ > >> >> public static final String utfEightConvert(String utfEightString) > >> >> throws java.io.UnsupportedEncodingException { > >> >> > >> >> byte[] bytes = new byte[utfEightString.length()]; > >> >> for (int i = 0; i < utfEightString.length(); i++) { > >> >> bytes[i] = (byte) utfEightString.charAt(i); > >> >> } > >> >> return new String(bytes, "UTF-8"); > >> >> > >> >> } > >> >> > >> >> Hope it helps. > >> >> Rakesh > >> >> > >> >> > >> >> On Tue, Jun 22, 2010 at 1:47 PM, Sergey Beryozkin < > [email protected] > >> >> >wrote: > >> >> > >> >> > Is it a form based submission ? or XML is posted in the body ? > >> >> > > >> >> > > >> >> > cheers, Sergey > >> >> > > >> >> > On Mon, Jun 21, 2010 at 6:00 PM, Loh Kok Jeng < > [email protected]> > >> >> > wrote: > >> >> > > >> >> > > Dear all, > >> >> > > > >> >> > > I'm struggling with non-ASCII characters passed in request params > of > >> a > >> >> > > REST service. The characters become ? when received by my app > >> >> > > developed using CXF. The encoding is set to UTF-8 by the REST > >> client. > >> >> > > Why do I get "?"? > >> >> > > > >> >> > > Thanks in advance. > >> >> > > > >> >> > > >> >> > >> > > >> > > >
