Home > Archive > PERL Miscellaneous > November 2007 > Help needed regarding RPC::XML return value
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Help needed regarding RPC::XML return value
|
|
|
| I am trying to write an XML-RPC server method in perl using RPC::XML,
and I am having a rather perplexing problem when I attempt to return a
data structure to the caller (a Java app). I am told that the caller
is expecting an array of structs as the result.
I have tried many things, but have ended up with the same problem. as
an example, and as an attempt to simplify things, this is what my
method is returning:
return [({'SELL_LINE_NUMBER' => '1', 'ERROR_CODE' => "0",
'MESSAGE' => "test", 'CURRENT_TOTAL' => "1"})];
This is the error that the Java app is generating when it receives the
response:
ERROR 26 Nov 2007 16:56:50
(org.wh.client.frontend.listener.WHAbstractFrontEndActionListener) -
java.lang.ClassCastException: java.lang.Integer
I have even tried this code snippet:
my @status;
my $record;
$record->{SELL_LINE_NUMBER} = $parts1;
$record->{ERROR_CODE} = "0";
$record->{MESSAGE} = "test";
$record->{CURRENT_TOTAL} = "1";
push(@status,$record);
return \@status;
with the same error being generated. I am at my wit's end trying to
figure out what is going on, and get it working. I also am not having
much luck finding other discussions of this problem elsewhere on the
internet.
I appreciate any and all help that you can supply.
Darcy
| |
| J. Gleixner 2007-11-26, 7:13 pm |
| Darcy wrote:
[...]
> ERROR 26 Nov 2007 16:56:50
> (org.wh.client.frontend.listener.WHAbstractFrontEndActionListener) -
> java.lang.ClassCastException: java.lang.Integer
>
>
> I have even tried this code snippet:
>
> my @status;
> my $record;
> $record->{SELL_LINE_NUMBER} = $parts1;
> $record->{ERROR_CODE} = "0";
> $record->{MESSAGE} = "test";
> $record->{CURRENT_TOTAL} = "1";
> push(@status,$record);
> return \@status;
>
> with the same error being generated. I am at my wit's end trying to
> figure out what is going on, and get it working. I also am not having
> much luck finding other discussions of this problem elsewhere on the
> internet.
>
> I appreciate any and all help that you can supply.
Just a guess..
Why are you quoting 0 and 1?
Given that the exception points to an Integer problem, remove
the quotes so Java will see it as an Integer instead of a string.
| |
| Ben Morrow 2007-11-26, 7:13 pm |
|
Quoth Darcy <darcykahle@gmail.com>:
> I am trying to write an XML-RPC server method in perl using RPC::XML,
> and I am having a rather perplexing problem when I attempt to return a
> data structure to the caller (a Java app). I am told that the caller
> is expecting an array of structs as the result.
>
> I have tried many things, but have ended up with the same problem. as
> an example, and as an attempt to simplify things, this is what my
> method is returning:
>
> return [({'SELL_LINE_NUMBER' => '1', 'ERROR_CODE' => "0",
> 'MESSAGE' => "test", 'CURRENT_TOTAL' => "1"})];
>
> This is the error that the Java app is generating when it receives the
> response:
>
> ERROR 26 Nov 2007 16:56:50
> (org.wh.client.frontend.listener.WHAbstractFrontEndActionListener) -
> java.lang.ClassCastException: java.lang.Integer
Just a completely random guess: have you tried using numbers instead of
strings? That is,
return [{
SELL_LINE_NUMBER => 1, # note absence of quotes
ERROR_CODE => 0,
MESSAGE => 'test',
CURRENT_TOTAL => 1,
}];
Ben
| |
|
| On Nov 26, 5:22 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth Darcy <darcyka...@gmail.com>:
>
>
>
>
>
>
>
>
> Just a completely random guess: have you tried using numbers instead of
> strings? That is,
>
> return [{
> SELL_LINE_NUMBER => 1, # note absence of quotes
> ERROR_CODE => 0,
> MESSAGE => 'test',
> CURRENT_TOTAL => 1,
> }];
>
> Ben
The reason for quoting the numbers, is because, the specs for the
return list all four as "string". I did try as straight numbers, but
got the same error.
| |
| Todd Wade 2007-11-26, 10:08 pm |
| On Nov 26, 7:19 pm, Darcy <darcyka...@gmail.com> wrote:
> On Nov 26, 5:22 pm, Ben Morrow <b...@morrow.me.uk> wrote:
>
<snip/>[color=darkred]
>
>
>
>
> The reason for quoting the numbers, is because, the specs for the
> return list all four as "string". I did try as straight numbers, but
> got the same error.
What does the XML that client sending to the server look like? Thats
what you need to be looking at. For example, you said the spec expects
strings for each value. Chances are that "quoting" the numbers isn't
going to suffice RPC::XML's purposes.
You can coerce a value to a specific type by passing RPC::XML data
objects instead of scalars:
return [{
SELL_LINE_NUMBER => RPC::XML::string->new(1),
ERROR_CODE => RPC::XML::string->new(0),
MESSAGE => 'test',
CURRENT_TOTAL => RPC::XML::string->new(1),
}];
This will format the value as a <string> instead of an <int> in the
XML.
Regards,
trwww
| |
|
| On Nov 26, 10:31 pm, Todd Wade <waveri...@gmail.com> wrote:
> On Nov 26, 7:19 pm, Darcy <darcyka...@gmail.com> wrote:
>
>
>
>
> <snip/>
>
>
>
>
>
> What does the XML that client sending to the server look like? Thats
> what you need to be looking at. For example, you said the spec expects
> strings for each value. Chances are that "quoting" the numbers isn't
> going to suffice RPC::XML's purposes.
>
> You can coerce a value to a specific type by passing RPC::XML data
> objects instead of scalars:
>
> return [{
> SELL_LINE_NUMBER => RPC::XML::string->new(1),
> ERROR_CODE => RPC::XML::string->new(0),
> MESSAGE => 'test',
> CURRENT_TOTAL => RPC::XML::string->new(1),
> }];
>
> This will format the value as a <string> instead of an <int> in the
> XML.
>
> Regards,
>
> trwww
Thanks. I will try that tomorrow. I do not know what the XML that is
being generated, though, since I currently do not have access to
that. I could try and "fudge" the request, so I can see the result,
unless there is a trick in perl where I could save a copy to file as
well as send to the requestor.
| |
|
| On Nov 26, 11:31 pm, Todd Wade <waveri...@gmail.com> wrote:
> On Nov 26, 7:19 pm, Darcy <darcyka...@gmail.com> wrote:
>
>
>
>
> <snip/>
>
>
>
>
>
> What does the XML that client sending to the server look like? Thats
> what you need to be looking at. For example, you said the spec expects
> strings for each value. Chances are that "quoting" the numbers isn't
> going to suffice RPC::XML's purposes.
>
> You can coerce a value to a specific type by passing RPC::XML data
> objects instead of scalars:
>
> return [{
> SELL_LINE_NUMBER => RPC::XML::string->new(1),
> ERROR_CODE => RPC::XML::string->new(0),
> MESSAGE => 'test',
> CURRENT_TOTAL => RPC::XML::string->new(1),
> }];
>
> This will format the value as a <string> instead of an <int> in the
> XML.
>
> Regards,
>
> trwww
Thanks. That worked like a charm. I will remember from now on that I
need to force those that are to be strings in this manner, or else
rather cryptic errors could result.
Darcy
|
|
|
|
|