Hi all,

I have an interoperability problem when calling an Apache CXF Web service (CXF version is 2.0.4) running under Apache Tomcat 6 from a VBA client program using MS Office 2003 Web Services Toolkit 2.03. When sending a request from the VBA client to the server, the response fails with the fault "Found element {http://annuaire.ciss.lu}questions but could not find matching RPC/Literal part". If I'm correct, the VBA client sends the request using qualified namespace for element "questions" but CXF expects an unqualified namespace. Due to technical constraints, I have to use RPC/Literal encoding and cannot switch to e.g. Document/Literal.

This is my web service:

package lu.ciss.annuaire.services;

@WebService(name="SimpleServiceName", targetNamespace="http://annuaire.ciss.lu";) @SOAPBinding(style=Style.RPC) public interface SimpleService {
   @WebMethod(operationName="GetAnswers")
   @WebResult(name="answer")
public String getAnswers(@WebParam(name="questions") String[] questions);
}

The VBA client sends the following request:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema";
   xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance";
   xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/";
   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";>
   <SOAP-ENV:Body>
       <SOAPSDK4:GetAnswers xmlns:SOAPSDK4="http://annuaire.ciss.lu";>
           <SOAPSDK4:questions SOAPSDK3:arrayType="SOAPSDK1:string[5]"
               SOAPSDK3:offset="[1]" SOAPSDK2:type="SOAPSDK3:Array">
               <item>What?</item>
               <item>Why?</item>
               <item>Where?</item>
               <item>Who?</item>
               <item>When?</item>
           </SOAPSDK4:questions>
       </SOAPSDK4:GetAnswers>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

As you can see the "questions" parameter is qualified. I know of the @XmlSchema annotation that you can place in the packge-info.java, but I don't know how to set the elementFormDefault to "qualified" for the namespace "http://jaxb.dev.java.net/array";. Moreover the problem remains the same when using only simple types (e.g. integers or strings) instead of an array: the elements describing the parameters are always qualified. Here is an extract of the WSDL:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:ns1="http://annuaire.ciss.lu";
   xmlns:ns2="http://jaxb.dev.java.net/array";
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="SimpleServiceName"
   targetNamespace="http://annuaire.ciss.lu";>
   <wsdl:types>
       <xs:schema xmlns="http://jaxb.dev.java.net/array";
           xmlns:xs="http://www.w3.org/2001/XMLSchema";
attributeFormDefault="unqualified" elementFormDefault="unqualified"
           targetNamespace="http://jaxb.dev.java.net/array";>
           <xs:complexType final="#all" name="stringArray">
               <xs:sequence>
                   <xs:element maxOccurs="unbounded" minOccurs="0"
                       name="item" nillable="true" type="xs:string" />
               </xs:sequence>
           </xs:complexType>
       </xs:schema>
   </wsdl:types>
   <wsdl:message name="GetAnswers">
       <wsdl:part name="questions" type="ns2:stringArray"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="GetAnswersResponse">
       <wsdl:part name="answer" type="xsd:string"></wsdl:part>
   </wsdl:message>
   <wsdl:portType name="SimpleServiceName">
       <wsdl:operation name="GetAnswers">
           <wsdl:input message="ns1:GetAnswers" name="GetAnswers">
           </wsdl:input>
           <wsdl:output message="ns1:GetAnswersResponse"
               name="GetAnswersResponse">
           </wsdl:output>
       </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

Can anyone confirm that the problem originates from the fact that elementFormDefault is set to "unqualified" and setting it to "qualified" could solve the problem? If so, how is it possible to instruct CXF in general that parameter elements are always qualified?

Moreover, perhaps someone uses CXF with the MS Web services toolkit and can share his experiences with me? Unfortunately, the toolkit seems quite buggy ... :-(

Thank you very much for any comments.

Best regards,
Pierre





Reply via email to