Request from IBM WebSphere causes HTTP status 500

View: New views
4 Messages — Rating Filter:   Alert me  

Request from IBM WebSphere causes HTTP status 500

by sende.mir.post :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello everyone,

I've been working on a SOAP webservice lately and experienced major
problems with an IBM WebSphere client.

My setup:
- Debian Lenny
- PHP 5.2.6-1
- PHP's official SOAP extension

I provide a simple service with a single operation named execute(),
offering a generic interface for remote procedure calls. I checked
my SoapServer with a PHP client and it works like a charm.

However if the service consumer runs an IBM WebSphere my methods
never get called. I checked Apache's access.log and it says:

XXX.XXX.XX.XXX - - [25/May/2009:16:41:56 +0200] "POST /server.php
HTTP/1.1" 500 296 "-" "IBM WebServices/1.0"

XXX.XXX.XX.XXX - - [25/May/2009:17:00:24 +0200] "POST /server.php
HTTP/1.1" 200 891 "-" "My PHP Client"

As you can see, the webserver responds with HTTP status 500. I don't
have a clue why this happens. Has anybody experienced similar
problems with IBM WebSphere + PHP's official SOAP extension?

I found a bug report from December 2007, but I'm not entirely sure
whether this is a similar problem at all (my script isn't called
at all, so it cannot throw a SOAPFault, right?):
http://bugs.php.net/bug.php?id=43507

I added some logging calls to server.php and my service class
(the one I use in $server->setClass('MyService')), but they
are never triggered.

Any ideas? I don't have any influence on the customers webservice,
so it's tough to make out what causes the problem (at least for me).
Does Apache log the complete requests somehow? Maybe that could be
helpful?

I'd appreciate any help, because I'm a little lost with this problem
right now. I'll provice you with further information, if needed.

Thanks in advance, I'm looking forward to your responds.

Bernd
--
Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate + Telefonanschluss für nur 17,95 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02

--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: Request from IBM WebSphere causes HTTP status 500

by fernandomm :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

Try to check you apache error log. If you are using Debian Lenny, them  
it is probably on /var/log/apache2/error.log

It might show you why error 500 is happening.

Regards,

Fernando Morgenstern

Em 27/05/2009, às 09:53, sende.mir.post@... escreveu:

> Hello everyone,
>
> I've been working on a SOAP webservice lately and experienced major
> problems with an IBM WebSphere client.
>
> My setup:
> - Debian Lenny
> - PHP 5.2.6-1
> - PHP's official SOAP extension
>
> I provide a simple service with a single operation named execute(),
> offering a generic interface for remote procedure calls. I checked
> my SoapServer with a PHP client and it works like a charm.
>
> However if the service consumer runs an IBM WebSphere my methods
> never get called. I checked Apache's access.log and it says:
>
> XXX.XXX.XX.XXX - - [25/May/2009:16:41:56 +0200] "POST /server.php
> HTTP/1.1" 500 296 "-" "IBM WebServices/1.0"
>
> XXX.XXX.XX.XXX - - [25/May/2009:17:00:24 +0200] "POST /server.php
> HTTP/1.1" 200 891 "-" "My PHP Client"
>
> As you can see, the webserver responds with HTTP status 500. I don't
> have a clue why this happens. Has anybody experienced similar
> problems with IBM WebSphere + PHP's official SOAP extension?
>
> I found a bug report from December 2007, but I'm not entirely sure
> whether this is a similar problem at all (my script isn't called
> at all, so it cannot throw a SOAPFault, right?):
> http://bugs.php.net/bug.php?id=43507
>
> I added some logging calls to server.php and my service class
> (the one I use in $server->setClass('MyService')), but they
> are never triggered.
>
> Any ideas? I don't have any influence on the customers webservice,
> so it's tough to make out what causes the problem (at least for me).
> Does Apache log the complete requests somehow? Maybe that could be
> helpful?
>
> I'd appreciate any help, because I'm a little lost with this problem
> right now. I'll provice you with further information, if needed.
>
> Thanks in advance, I'm looking forward to your responds.
>
> Bernd
> --
> Neu: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate +  
> Telefonanschluss für nur 17,95 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02
>
> --
> PHP Soap Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>


--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: Request from IBM WebSphere causes HTTP status 500

by sende.mir.post :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

I checked error.log, but it's empty (at least no SOAP-related
entries). So I extended my logging and noticed that my server
script actually IS being called, though my SOAP operation is
not executed.

-----

This is my service class MyServer.class.php:

class MyServer
{
  public function execute($arg)
  {
    Logger::getInstance('server.txt')->writeLog($arg);

    ...
  }
}

-----

This is my server.php:

$log = Logger::getInstance('server.txt');

$log->writeLog('POST request:' . "\r\n\r\n" . $HTTP_RAW_POST_DATA);
$log->writeLog('Server script was called.');

try
{
  $log->writeLog('Script entered try-block.');

  $server = new SoapServer(MY_DIR . 'service.wsdl');
  $server->setClass('MyServer');
  $server->handle();
}
catch (SoapFault $e)
{
  $log->writeLog('Script entered catch-block.');
  $log->writeLog('Error message: ' . $e->faultstring);

  echo $e->faultstring;
}

$log->writeLog('Server script was ended.');

-----

And finally this is the output I got:

##################################################
29.05.2009 09:40:40 (II) POST request:
<SOAP request...>
##################################################
29.05.2009 09:40:40 (II) Server script was called.
##################################################
29.05.2009 09:40:40 (II) Script entered try-block.
##################################################

-----

So obviously the SOAP call fails somewhere before or in my
service class and HTTP status 500 is thrown. The SOAP request
is there and looks valid (at least structure and content are
there as expected).

Any further ideas? Might there be some encoding problems or
something? Has no one experienced similar difficulties? I
thought there's quite a bunch of WebSphere services out there.

Regards,
Bernd

-------- Original-Nachricht --------

> Hello,
>
> Try to check you apache error log. If you are using Debian Lenny, them  
> it is probably on /var/log/apache2/error.log
>
> It might show you why error 500 is happening.
>
> Regards,
>
> Fernando Morgenstern
--
Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate und
Telefonanschluss nur 17,95 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02

--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: Request from IBM WebSphere causes HTTP status 500

by sende.mir.post :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello once again,

By now it seems like I solved the problem. There was an additional
header in the SOAP request, having mustUnderstand set to "1". It
goes without saying that PHP's SOAP extension did NOT understand
the WS-Security header and consequently threw an internal server
error.

So I manipulated $HTTP_RAW_POST_DATA prior to calling handle()
on my SoapServer and now all works fine (HTTP 200: OK).

-----

This is what my solution looks like:

$server = new SoapServer(MY_DIR . 'service.wsdl');
$server->setClass('MyServer');

$request = str_replace('mustUnderstand="1"',
  'mustUnderstand="0"', $HTTP_RAW_POST_DATA);

$server->handle($request);

-----

Regards,
Bernd
--
GMX FreeDSL mit DSL 6.000 Flatrate und Telefonanschluss nur 17,95 Euro/mtl.!
http://dslspecial.gmx.de/freedsl-aktionspreis/?ac=OM.AD.PD003K11308T4569a

--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php