SOAP Envelope Error

soap4r is generating this:

POST /Wahp.Provisioning/User.asmx HTTP/1.1
SOAPAction: “http://affinity.com/Wahp/Provisioning/IsValidLogin
Content-Type: text/xml; charset=utf-8
Authorization: Basic U0hBUkVEXuaXN0cmF0b3I6JZSQ=
User-Agent: SOAP4R/1.5.5 (/114, ruby 1.8.5 (2006-08-25) [i386-mswin32])
Date: Wed Sep 20 13:44:12 -0400 2006
Content-Length: 437
Host: web001whp001:3250

<?xml version="1.0" encoding="utf-8" ?>

<env:Envelope xmlns:xsd=“XML Schema
xmlns:env=“http://schemas.xmlsoap.org/soap/envelope/
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
env:Body
<n1:IsValidLogin xmlns:n1=“StackPath”>
n1:usernameUsername</n1:username>
n1:passwordPassword</n1:password>
</n1:IsValidLogin>
</env:Body>
</env:Envelope>

My service expects this:

POST /Wahp.Provisioning/User.asmx HTTP/1.1
Host: web001whp001
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: “http://affinity.com/Wahp/Provisioning/IsValidLogin

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xmlns:xsd=“XML Schema
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/”>
soap:Body

string
string

</soap:Body>
</soap:Envelope>

What am I doing wrong?

class Test
def initialize()
@driver = Driver.new(URL,NS)
@driver.wiredump_dev = STDOUT
@driver.options[“protocol.http.basic_auth”] << [URL, USERNAME,
PASSWORD]
@driver.default_encodingstyle =
SOAP::EncodingStyle::ASPDotNetHandler::Namespace

@driver.add_method_with_soapaction(‘IsValidLogin’,SOAP_ACTION,‘username’,‘password’)
puts @driver.IsValidLogin(“Username”,“Password”)
end
end

  • Mark

On 9/20/06, Mark A. Richman [email protected] wrote:

Host: web001whp001:3250
</env:Body>

<?xml version="1.0" encoding="utf-8"?>

What am I doing wrong?

You are doing nothing wrong. Both xmls are the same according to SOAP
spec.

Kent S. wrote:

Content-Length: 437
</n1:IsValidLogin>

</soap:Envelope>

What am I doing wrong?

You are doing nothing wrong. Both xmls are the same according to SOAP
spec.

Are you sure the problem is with the envelope itself. I had a problem
talking to .net webservices but the problem was with namespace tags
being applied were they shouldn’t. Your examples above show similar
differences.

<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
  <n1:username>Username</n1:username>
  <n1:password>Password</n1:password>
</n1:IsValidLogin>

<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
  <username>string</username>
  <password>string</password>
</IsValidLogin>

I tend to agree…I see the ns1 namespace, but also env vs. soap. Any
thoughts on how to make this work with .asmx?

Thanks,
Mark

On 9/20/06, David S. [email protected] wrote:

Content-Type: text/xml; charset=utf-8
env:Body
Host: web001whp001
string
spec.
</n1:IsValidLogin>

<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
  <username>string</username>
  <password>string</password>
</IsValidLogin>

But from XML point of view these are identical.

This attribute

xmlns=“StackPath

defines a default namespace for the element and all its children that
are
without a namespace identifier.

Mark A. Richman wrote:

</env:Envelope>
<soap:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
What am I doing wrong?
@driver.add_method_with_soapaction(‘IsValidLogin’,SOAP_ACTION,‘username’,‘password’)
puts @driver.IsValidLogin(“Username”,“Password”)
end
end

  • Mark

I had the same exact problem with one of our data providers, and found
no way to make it work with
soap4r nor JOpera (a java based service orchestrator) nor some other
java wsdl tools tried.
So from strict xml point of view this wsdls are equivalent, but most
non-windoze wsdl parsers choke on it.
Luckily our provider was considering migrating to Java+Axis, and this
“feature” of .NET convinced them,
so this became a non-issue for me.

Werner Bohl

Kent S. wrote:

actual names do not matter, what matters is URI they point to. Please,
refer
to the spec: Namespaces in XML 1.0 (Third Edition)

I don’t know what kind of problem you are having with .Net.

What does the WSDL look like?

On 9/20/06, Mark A. Richman [email protected] wrote:

I tend to agree…I see the ns1 namespace, but also env vs. soap. Any
thoughts on how to make this work with .asmx?

Thanks,
Mark

‘env’ and ‘soap’ are just markers or identifiers of a namespace. Their
actual names do not matter, what matters is URI they point to. Please,
refer
to the spec: Namespaces in XML 1.0 (Third Edition)

I don’t know what kind of problem you are having with .Net.

I figured out that 90% of my problem was a trailing slash in my
namespace! I get a valid response from ASP.NET now.

However, my final question is how to convert my result into a boolean.
I get this object as a result now: #SOAP::Mapping::Object:0x3ddd1d4

Here’s my code:

require ‘soap/rpc/driver’
include SOAP::RPC

URL = “http://web001whp001:3250/Wahp.Provisioning/User.asmx
NS = “StackPath
SOAP_ACTION = “StackPath
USERNAME = “SHARED\Administrator”
PASSWORD = “$secure$”

class AuthenticationClient
def initialize()
@driver = Driver.new(URL,NS,SOAP_ACTION)
@driver.wiredump_dev = STDOUT
@driver.options[“protocol.http.basic_auth”] << [URL, USERNAME,
PASSWORD]

@driver.add_document_method('IsValidLogin',SOAP_ACTION,
  [XSD::QName.new(NS,'IsValidLogin')],
  [XSD::QName.new(NS,'IsValidLoginResult')])

result =

@driver.IsValidLogin(:username=>“Username”,:password=>“Password”)
end
end

AuthenticationClient.new

And here is my SOAP response:

HTTP/1.1 200 OK
Date: Thu, 21 Sep 2006 14:41:58 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 383

<?xml version="1.0" encoding="utf-8"?><soap:Envelope

xmlns:soap=“http://schemas.
xmlsoap.org/soap/envelope/
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>soap:Bodyfalse</IsValid
LoginResult></soap:Body></soap:Envelope>

Thanks,
Mark

try object.inspect to see what methods and variables it contains.
The answer you’re looking for is probably hidden within

Matt

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Sorry for late reply.

Mark A. Richman wrote:

I figured out that 90% of my problem was a trailing slash in my
namespace! I get a valid response from ASP.NET now.

However, my final question is how to convert my result into a boolean.
I get this object as a result now: #SOAP::Mapping::Object:0x3ddd1d4

Did you solve this problem? You need to define your custom mapping
registry for it. Or use ‘result.isValidLoginResult == “true”’ instead
of it.

Regards,
// NaHi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)

iQEVAwUBRSBhvh9L2jg5EEGlAQK+/Qf/TENM5DDjUmVdZ/qah2Mo3VL/22dESHaK
cTq3rvNlw4J9WC0XgWeVr9K8YiCFSxTnbwjbyivhjjYDqrH9Gxpsy/Jqxo1TMGfa
2GhGcdMLLCZ8CACKroKkSJyHNOfcxgj4ouqHr83FzAk6Ud+NqT+hf01Fz5caF5Qh
kBmrtx73hN+EAqvI1Z/0wSqXw63ClEnK4USZPFX5Cr57Wv8xIOJ0rUHJV0MsDyDF
liZ4U037Q4wQ2Vkqslz3B7Ez4ufn6lgwTdj+JwFwfrCNeGAoyhJuFqMqU6kKTtuE
cEhXURwpCBXtH3slFBBcfJIPP/mLYfhO88Y0wnH6n6rB1PSsPFMrrQ==
=wshO
-----END PGP SIGNATURE-----