Help needed regarding RPC::XML return value
Help needed regarding RPC::XML return value
am 26.11.2007 23:14:56 von darcykahle
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.WHAbstractFrontEndActionLis tener) -
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
Re: Help needed regarding RPC::XML return value
am 26.11.2007 23:22:48 von Ben Morrow
Quoth Darcy :
> 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.WHAbstractFrontEndActionLis tener) -
> 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
Re: Help needed regarding RPC::XML return value
am 26.11.2007 23:30:31 von glex_no-spam
Darcy wrote:
[...]
> ERROR 26 Nov 2007 16:56:50
> (org.wh.client.frontend.listener.WHAbstractFrontEndActionLis tener) -
> 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.
Re: Help needed regarding RPC::XML return value
am 27.11.2007 01:19:38 von darcykahle
On Nov 26, 5:22 pm, Ben Morrow wrote:
> Quoth Darcy :
>
>
>
> > 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.WHAbstractFrontEndActionLis tener) -
> > 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
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.
Re: Help needed regarding RPC::XML return value
am 27.11.2007 04:31:27 von Todd Wade
On Nov 26, 7:19 pm, Darcy wrote:
> On Nov 26, 5:22 pm, Ben Morrow wrote:
> > Quoth Darcy :
>
> > > 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.
> > > 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.WHAbstractFrontEndActionLis tener) -
> > > 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,
> > }];
>
> 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 instead of an in the
XML.
Regards,
trwww
Re: Help needed regarding RPC::XML return value
am 27.11.2007 05:14:09 von darcykahle
On Nov 26, 10:31 pm, Todd Wade wrote:
> On Nov 26, 7:19 pm, Darcy wrote:
>
>
>
> > On Nov 26, 5:22 pm, Ben Morrow wrote:
> > > Quoth Darcy :
>
> > > > 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.
>
> > > > 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.WHAbstractFrontEndActionLis tener) -
> > > > 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,
> > > }];
>
> > 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 instead of an 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.
Re: Help needed regarding RPC::XML return value
am 27.11.2007 15:02:59 von darcykahle
On Nov 26, 11:31 pm, Todd Wade wrote:
> On Nov 26, 7:19 pm, Darcy wrote:
>
>
>
> > On Nov 26, 5:22 pm, Ben Morrow wrote:
> > > Quoth Darcy :
>
> > > > 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.
>
> > > > 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.WHAbstractFrontEndActionLis tener) -
> > > > 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,
> > > }];
>
> > 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 instead of an 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