Hi,
I'm having a problem when I add the DOMInHandler to my web service. My
web service is using XMLBeans and I'm using Spring to configure it. All
works as expected when I have no DOMInHandler. Adding the DOMInHandler
results in the following error upon calling the validate method of
XMLBean object, although the SOAP request has only one "orderId"
attribute:
Duplicate attribute: orderId in element
[EMAIL PROTECTED]://www.posportal.com
This is the schema I'm using:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
elementFormDefault="qualified"
targetNamespace="http://www.posportal.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.posportal.com">
<xs:element name="GetPerson" type="tns:personType"/>
<xs:complexType name="personType">
<xs:sequence>
<xs:element name="ethnicity" type="xs:string"/>
<xs:element name="sex" type="xs:string"/>
</xs:sequence>
<xs:attribute name="orderId" use="required" type="xs:string"/>
</xs:complexType>
</xs:schema>
I've then written a service with the following interface and class:
public interface Person {
public GetPersonDocument GetPersonDoc(GetPersonDocument body,
MessageContext mCtx);
}
public class PersonImpl implements Person {
public GetPersonDocument GetPersonDoc(GetPersonDocument body,
MessageContext mCtx){
ArrayList errors=new ArrayList();
XmlOptions validateOptions = new XmlOptions();
validateOptions.setErrorListener(errors);
validateOptions.setSaveNamespacesFirst();
String sError="";
if (!body.validate(validateOptions)) {
for (int i = 0; i < errors.size(); i++) {
XmlError xmlError = (XmlError) errors.get(i);
sError=sError + " ----- " +
xmlError.getMessage();
}
}
GetPersonDocument resp=body;
if(sError.length()>0){
System.out.println(sError);
resp.getGetPerson().setSex(sError);
}
return resp;
}
}
The service is configured as follows:
<bean id="xfirePerson"
class="com.posportal.ws.xfire.person.PersonImpl"/>
<bean name="Person"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceBean" ref="xfirePerson" />
<property name="serviceClass">
<value>com.posportal.ws.xfire.person.Person</value>
</property>
<property name="serviceFactory">
<ref bean="xfire.xmlbeansServiceFactory"/>
</property>
<property name="inHandlers">
<list>
<ref bean="DOMInHandler"/>
</list>
</property>
</bean>
<bean id="DOMInHandler"
class="org.codehaus.xfire.util.dom.DOMInHandler"/>
Below is the SOAP request I'm submitting:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:pos="http://www.posportal.com">
<soapenv:Header/>
<soapenv:Body>
<pos:GetPerson orderId="123">
<pos:ethnicity>sonoras imperio</pos:ethnicity>
<pos:sex>quae divum incedo</pos:sex>
</pos:GetPerson>
</soapenv:Body>
</soapenv:Envelope>
I've tried searching Google and the various XFire resources, but have
found no indication of this issue. Any advice would be greatly
appreciated.
Thanks,
Jeff