Q

Java clients for Microsoft MapPoint .NET

This Content Component encountered an error

I cannot get Java clients to work after generating Java classes from MapPoint Web services WSDL available at http://service.mappoint.net/find-20/mappoint.wsdl

I know that Microsoft uses document style SOAP as default while most Java implementations use RPC by default. Is this a reason for problems in running clients/generating WSDL for MapPoint services?

I tried testing MapPoint WSDL in Round 3 SoapBuilders interoperabity and the error is as follows:

 Errors
wsdl exception: com.iona.webservices.wsdl.handlers.schema.ElementHandler :
PropertyValue element doesnt have a type defined
com.iona.webservices.soap.client.WSDLToolkitException: wsdl exception:
com.iona.webservices.wsdl.handlers.schema.ElementHandler : PropertyValue
element doesnt have a type defined

The problem is not related to RPC/Literal. It's an incompatibility with the WSDL type definitions. As your error message says, there's no type definition for the PropertyValue element. The PropertyValue element is an element within the PropertySet type:

<s:complexType name="PropertySet">
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="PropertyName" type="s:string"
/>
  <s:element minOccurs="0" maxOccurs="1" name="PropertyValue" />
  </s:sequence>
</s:complexType>

But as you can see, it has no type definition, and the element isn't defined anywhere else in the WSDL file, either. It appears that IONA XMLBus requires that all elements have an explicit type definition. SOAP doesn't specify a default type, so I wouldn't say that IONA is in error here. Other WSDL tools may be able to tolerate this situation, though.

For example, the WASP WSDL Compiler can process the WSDL just fine. It produces the following class for PropertySet:

public class PropertySet {

    public java.lang.String PropertyName;
    public java.lang.Object PropertyValue;

}
As you can see, it maps the unknown XML type to an object.

If you want to get XMLbus to compile the WSDL, I guess you'll need to modify the WSDL and give PropertyValue a type. It's hard to tell from the WSDL what the PropertyValue is supposed to contain, but I would assume a string. Modify the WSDL thus:

<s:complexType name="PropertySet">
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="PropertyName" type="s:string"
/>
  <s:element minOccurs="0" maxOccurs="1" name="PropertyValue"
type="s:string" />
  </s:sequence>
</s:complexType>

and it should work.

This was first published in June 2002

Dig deeper on Simple Object Access Protocol (SOAP)

Pro+

Features

Enjoy the benefits of Pro+ membership, learn more and join.

Have a question for an expert?

Please add a title for your question

Get answers from a TechTarget expert on whatever's puzzling you.

You will be able to add details on the next page.

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchSoftwareQuality

SearchCloudApplications

SearchAWS

TheServerSide

SearchWinDevelopment

Close