You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Qiuming Bao (JIRA)" <ji...@apache.org> on 2008/02/24 21:23:14 UTC
[jira] Updated: (AXIS2-3538) RPCServiceClient response handling
incorrect when there are multi byte[] object in the return bean
[ https://issues.apache.org/jira/browse/AXIS2-3538?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Qiuming Bao updated AXIS2-3538:
-------------------------------
Attachment: WeatherSpringRPCClient.java
RPCServiceClient modified from axis2 bundled sample
> RPCServiceClient response handling incorrect when there are multi byte[] object in the return bean
> --------------------------------------------------------------------------------------------------
>
> Key: AXIS2-3538
> URL: https://issues.apache.org/jira/browse/AXIS2-3538
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Components: adb, rpc
> Affects Versions: 1.3
> Environment: WinXP, JDK 1.5
> Spring+Axis2 1.3
> Reporter: Qiuming Bao
> Attachments: WeatherSpringRPCClient.java, WeatherSpringService.aar
>
> Original Estimate: 168h
> Remaining Estimate: 168h
>
> I'm using the axis2 with Spring integrated. POJO Spring bean as service is working.
> But the object returned/retrieved on the client side ( with RPCServiceClient) is incorrect.
> In the return object, there are several byte[] attributes.
> On the client, the return object's byte[] attributes will be set with the value of the first byte[] attribute.
>
> Following is the modified WeatherSpringService code based on axis2 bundled sample.
> /** Weather.java */
> package sample.spring.bean;
> public class Weather{
> float temperature;
> String forecast;
> boolean rain;
> float howMuchRain;
> byte[] b1;
> byte[] b2;
> byte[] b3;
>
> public void setTemperature(float temp){
> temperature = temp;
> }
> public float getTemperature(){
> return temperature;
> }
>
> public void setForecast(String fore){
> forecast = fore;
> }
> public String getForecast(){
> return forecast;
> }
>
> public void setRain(boolean r){
> rain = r;
> }
> public boolean getRain(){
> return rain;
> }
>
> public void setHowMuchRain(float howMuch){
> howMuchRain = howMuch;
> }
> public float getHowMuchRain(){
> return howMuchRain;
> }
>
> public void setB1(byte[] b) {
> this.b1 = b;
> }
> public byte[] getB1() {
> return b1;
> }
> public void setB2(byte[] b) {
> this.b2 = b;
> }
> public byte[] getB2() {
> return b2;
> }
> public void setB3(byte[] b) {
> this.b3 = b;
> }
> public byte[] getB3() {
> return b3;
> }
> }
> /** WeatherSpringRPCClient .java */
> package client;
> import javax.xml.namespace.QName;
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.addressing.EndpointReference;
> import org.apache.axis2.client.Options;
> import org.apache.axis2.rpc.client.RPCServiceClient;
> import sample.spring.bean.Weather;
> public class WeatherSpringRPCClient {
> public static void main(String[] args1) throws AxisFault {
> RPCServiceClient serviceClient = new RPCServiceClient();
> Options options = serviceClient.getOptions();
> EndpointReference targetEPR
> = new EndpointReference(
> "http://localhost:8080/axis2/services/WeatherSpringService");
>
> options.setTo(targetEPR);
> // Get the weather (no setting, the Spring Framework has already initialized it for us)
> QName opGetWeather = new QName("http://service.spring.sample/xsd", "getWeather");
> Object[] opGetWeatherArgs = new Object[] { };
> Class[] returnTypes = new Class[] { Weather.class };
>
>
> Object[] response = serviceClient.invokeBlocking(opGetWeather,
> opGetWeatherArgs, returnTypes);
>
> Weather result = (Weather) response[0];
>
> // display results
> if (result == null) {
> System.out.println("Weather didn't initialize!");
> }else{
> System.out.println("Temperature : " +
> result.getTemperature());
> System.out.println("Forecast : " +
> result.getForecast());
> System.out.println("Rain : " +
> result.getRain());
> System.out.println("How much rain (in inches) : " +
> result.getHowMuchRain());
> System.out.println("Byte b1 : " +
> new String(result.getB1()));
> System.out.println("Byte b2 : " +
> new String(result.getB2()));
> System.out.println("Byte b3 : " +
> new String(result.getB3()));
> }
> }
> }
> /** WeatherSpringService */
> package sample.spring.service;
> import sample.spring.bean.Weather;
> public class WeatherSpringService{
> Weather weather;
> byte[] b1 = "Hello b1".getBytes();
> byte[] b2 = "Hello b2".getBytes();
> byte[] b3 = "Hello b3".getBytes();
>
> public void setWeather(Weather w){
> weather = w;
> w.setB1(b1);
> w.setB2(b2);
> w.setB3(b3);
> }
> public Weather getWeather(){
> return weather;
> }
> }
> /** The result printed out is */
> rpc.client.run:
> [echo] F:\Software\java\axis2-1.3\samples\pojoguidespring\build.xml
> [java] log4j:WARN No appenders could be found for logger (org.apache.axis2.
> util.Loader).
> [java] log4j:WARN Please initialize the log4j system properly.
> [java] Temperature : 89.9
> [java] Forecast : Sunny
> [java] Rain : false
> [java] How much rain (in inches) : 0.2
> [java] Byte b1 : Hello b1
> [java] Byte b2 : Hello b1
> [java] Byte b3 : Hello b1
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org