Hiya,
What does your Test.class look like? I'm going to guess that XFire
doesn't know to know to name the parameters Person, but is expecting
in0, etc. You can use @WebParam.name/targetNamespace to give XFire hints
about this. Or you can supply the name in a aegis mapping file if you want.
- Dan
Rickard Schoultz wrote:
Hi,
I have created an xfire web service by crafting a wsdl with an
imported schema using a tool, generated pojo's, and created a server.
The service works fine if I create a client based on the client code
from xfire, but when I try to use the service from testing tools like
SOAPscope or SoapUi, the tests fail. But, seeing that an XFire based
client succeeds, I can modifya request to enclose parameters in
<in0>...</in0>, and the test succeeds.
It seems like the xfire service requires the method parameters to be
put into an array, but the test tools interpretation of the wsdl and
schema does not think so. How can that be?
I have seen similar cases in the mailing lists and Jira, but not much
examples or conclusions. But maybe I missed something obvious?
So I made an experiment and created a contrived dummy service from
scratch to be able to show the case:
Below are:
1. test.wsdl
2. test.xsd
3: Script to generate code:
4. ServiceStarter.java
5. Request from test tool + (failing) result
6. Hand edited request + (successful) result
1. test.wsdl:
=========
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="Test"
targetNamespace="http://www.example.org/test/definitions"
xmlns:tns="http://www.example.org/test/definitions"
xmlns:types="http://www.example.org/test/schemas"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/test/schemas">
<xsd:import namespace="http://www.example.org/test/schemas"
schemaLocation="test.xsd" />
</xsd:schema>
</wsdl:types>
<wsdl:message name="favoriteColorInput">
<wsdl:part element="types:favoriteColor" name="parameters" />
</wsdl:message>
<wsdl:message name="favoriteColorOutput">
<wsdl:part element="types:favoriteColorResponse" name="parameters" />
</wsdl:message>
<wsdl:portType name="Test">
<wsdl:operation name="favoriteColor">
<wsdl:input message="tns:favoriteColorInput" name="favoriteColorInput" />
<wsdl:output message="tns:favoriteColorOutput"
name="favoriteColorOutput" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="testSOAP" type="tns:Test">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="favoriteColor">
<soap:operation soapAction="" />
<wsdl:input><soap:body use="literal" /></wsdl:input>
<wsdl:output><soap:body use="literal" /></wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Test">
<wsdl:port binding="tns:testSOAP" name="testSOAP">
<soap:address location="http://localhost:8191/Test" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
2. test.xsd
========
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/test/schemas"
elementFormDefault="qualified">
<xsd:element name="favoriteColor">
<xsd:complexType>
<xsd:all>
<xsd:element name="Person" type="xsd:string" />
<xsd:element name="Day" type="xsd:string" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="favoriteColorResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Code" type="xsd:integer" />
<xsd:element name="Message" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
3: Script to generate code:
===================
#!/bin/bash
WSDL="../WSTest/test.wsdl"
export
gpath="xfire-all-1.2.2.jar;lib/XmlSchema-1.1.jar;lib/activation-1.1.jar;lib/ant-1.5.jar;lib/bcprov-jdk15-133.jar;lib/common
s-attributes-api-2.1.jar;lib/commons-beanutils-1.7.0.jar;lib/commons-codec-1.3.jar;lib/commons-discovery-0.2.jar;lib/commons-httpc
lient-3.0.jar;lib/commons-logging-1.0.4.jar;lib/jaxb-api-2.0.jar;lib/jaxb-impl-2.0.1.jar;lib/jaxb-xjc-2.0.1.jar;lib/jaxen-1.1-beta
-9.jar;lib/jaxws-api-2.0.jar;lib/jdom-1.0.jar;lib/jmock-1.0.1.jar;lib/jsr173_api-1.0.jar;lib/junit-3.8.1.jar;lib/mail-1.4.jar;lib/
opensaml-1.0.1.jar;lib/org.mortbay.jetty-5.1.3.jar;lib/saaj-api-1.3.jar;lib/saaj-impl-1.3.jar;lib/servlet-api-2.3.jar;lib/spring-1
.2.6.jar;lib/stax-api-1.0.1.jar;lib/stax-utils-snapshot-20040917.jar;lib/wsdl4j-1.5.2.jar;lib/wss4j-1.5.0.jar;lib/wstx-asl-3.0.1.j
ar;lib/xbean-2.1.0.jar;lib/xbean-spring-2.5.jar;lib/xercesImpl-2.6.2.jar;lib/xfire-jsr181-api-1.0-M1.jar;lib/xml-apis-1.0.b2.jar;l
ib/xmlsec-1.3.0.jar;lib/*.zip"
java -cp $gpath org.codehaus.xfire.gen.WsGen -wsdl $WSDL -o
../WSTest/source/java -p org.example.ws.stub -overwrite true
4: ServiceStarter.java
===============
package org.example.ws.server;
import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.server.http.XFireHttpServer;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.service.invoker.BeanInvoker;
import org.example.ws.stub.Test;
import org.example.ws.stub.TestImpl;
public class ServiceStarter
{
XFireHttpServer server;
public void start() throws Exception
{
// Create a service
ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
//Create an XFire Service
Service service = serviceFactory.create(Test.class);
service.setInvoker(new BeanInvoker(new TestImpl()));
// Register the service in the ServiceRegistry
XFire xfire = XFireFactory.newInstance().getXFire();
xfire.getServiceRegistry().register(service);
// Start the HTTP server
server = new XFireHttpServer();
server.setPort(8191);
server.start();
}
public static void main(String[] args)
{
ServiceStarter s = new ServiceStarter();
try { s.start(); }
catch (Exception e)
{ e.printStackTrace(); }
}
}
5. Request from test tool + (failing) result
==============================
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<s0:favoriteColor
xmlns:s0="http://www.example.org/test/schemas"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<s0:Person>Carl</s0:Person>
<s0:Day>Monday</s0:Day>
</s0:favoriteColor>
</soapenv:Body>
</soapenv:Envelope>
(failing) result:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Index: 1, Size: 1</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
6. Hand edited request + (successful) result
================================
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<s0:favoriteColor
xmlns:s0="http://www.example.org/test/schemas"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<in0>
<s0:Person>Carl</s0:Person>
<s0:Day>Monday</s0:Day>
</in0>
</s0:favoriteColor>
</soapenv:Body>
</soapenv:Envelope>
Succesful result - (UnsupportedOperationException is OK because I haven't
changed the stubs yet):
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Fault:
java.lang.UnsupportedOperationException</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Best regards,
Rickard
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
--
Dan Diephouse
Envoi Solutions
http://envoisolutions.com
http://netzooid.com/blog
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email