Failed to set value - argument type mismatch
hugin78 Jan 11, 2007 10:30 AMHallo
In my wsdl file I have a type with enumerations. I have one operation that returns an instance of the type - This one is working fine. I then have another that take an instance of the type as argument and this one fails with the exception:
2007-01-11 16:09:03,253 WARN [org.jboss.webservice.metadata.jaxrpcmapping.JavaWsdlMapping] Cannot find jaxrpc-mapping for type: {http://ws.facade.as2007.wmdata.com/jaws}CarType
2007-01-11 16:09:03,253 WARN [org.jboss.webservice.metadata.jaxrpcmapping.JavaWsdlMapping] Cannot find jaxrpc-mapping for type: {http://ws.facade.as2007.wmdata.com/jaws}getCar
2007-01-11 16:09:03,253 WARN [org.jboss.webservice.metadata.jaxrpcmapping.JavaWsdlMapping] Cannot find jaxrpc-mapping for type: {http://ws.facade.as2007.wmdata.com/jaws}getCarResponse
2007-01-11 16:09:03,253 WARN [org.jboss.webservice.metadata.jaxrpcmapping.JavaWsdlMapping] Cannot find jaxrpc-mapping for type: {http://ws.facade.as2007.wmdata.com/jaws}setCar
2007-01-11 16:09:03,253 WARN [org.jboss.webservice.metadata.jaxrpcmapping.JavaWsdlMapping] Cannot find jaxrpc-mapping for type: {http://ws.facade.as2007.wmdata.com/jaws}setCarResponse
2007-01-11 16:09:03,253 WARN [org.jboss.ws.jaxb.SchemaBindingBuilder] Type definition not found in schema: {http://ws.facade.as2007.wmdata.com/jaws}CarType
2007-01-11 16:09:03,253 WARN [org.jboss.ws.jaxb.SchemaBindingBuilder] Cannot obtain type binding for: {http://ws.facade.as2007.wmdata.com/jaws}CarType
2007-01-11 16:09:03,253 ERROR[org.jboss.ws.jaxrpc.SOAPFaultExceptionHelper] SOAP request exception
javax.xml.rpc.JAXRPCException: org.jboss.ws.binding.BindingException: javax.xml.bind.JAXBException: Failed to parse source: Failed to set value java.lang.String@112785[red] using setter setColor on com.wmdata.as2007.xml.jaxbbindings.CarType@15580831 (toString=com.wmdata.as2007.xml.jaxbbindings.CarTy
pe@edbe9f) : argument type mismatch
- with linked exception:
[org.jboss.xb.binding.JBossXBException: Failed to parse source: Failed to set value java.lang.String@112785[red] using setter setColor on com.wmdata.as2007.xml.jaxbbindings.CarType@15580831 (toString=com.wmdata.as2007.xml.jaxbbindings.CarType@edbe9f) : argument type mismatch]
at org.jboss.ws.soap.SOAPContentElement.getObjectValue(SOAPContentElement.java:307)
at org.jboss.ws.binding.EndpointInvocation.transformPayloadValue(EndpointInvocation.java:233)
at org.jboss.ws.binding.EndpointInvocation.getRequestParamValue(EndpointInvocation.java:103)
at org.jboss.ws.binding.EndpointInvocation.getRequestPayload(EndpointInvocation.java:117)
at org.jboss.ws.server.ServiceEndpointInvokerEJB3.invokeServiceEndpoint(ServiceEndpointInvokerEJB3.java:106)
at org.jboss.ws.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:118)
at org.jboss.ws.server.ServiceEndpoint.handleRequest(ServiceEndpoint.java:234)
at org.jboss.ws.server.ServiceEndpointServlet.doPost(ServiceEndpointServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.jboss.ws.binding.BindingException: javax.xml.bind.JAXBException: Failed to parse source: Failed to set value java.lang.String@112785[red] using setter setColor on com.wmdata.as2007.xml.jaxbbindings.CarType@15580831 (toString=com.wmdata.as2007.xml.jaxbbindings.CarType@edbe9f) : argumen
t type mismatch
My wsdlfile (used the jboss autogenerated one and changed the types):
<definitions name='CarWSService' targetNamespace='http://ws.facade.as2007.wmdata.com/jaws' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:ns1='http://jaxbbindings.xml.as2007.wmdata.com/jaws' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://ws.facade.as2007.wmdata.com/jaws' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <types> <schema elementFormDefault='qualified' targetNamespace='http://jaxbbindings.xml.as2007.wmdata.com/jaws' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:ns1='http://ws.facade.as2007.wmdata.com/jaws' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://jaxbbindings.xml.as2007.wmdata.com/jaws' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <import namespace='http://ws.facade.as2007.wmdata.com/jaws'/> <simpleType name='CarColor'> <restriction base='string'> <enumeration value='red'/> <enumeration value='green'/> </restriction> </simpleType> <complexType name='CarType'> <sequence> <element maxOccurs='1' name='color' nillable='true' type='tns:CarColor'/> </sequence> </complexType> </schema> <schema elementFormDefault='qualified' targetNamespace='http://ws.facade.as2007.wmdata.com/jaws' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:ns2='http://jaxbbindings.xml.as2007.wmdata.com/jaws' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://ws.facade.as2007.wmdata.com/jaws' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <import namespace='http://jaxbbindings.xml.as2007.wmdata.com/jaws'/> <complexType name='getCar'> <sequence/> </complexType> <complexType name='getCarResponse'> <sequence> <element name='result' nillable='true' type='ns2:CarType'/> </sequence> </complexType> <complexType name='setCar'> <sequence> <element name='CarType_1' nillable='true' type='ns2:CarType'/> </sequence> </complexType> <complexType name='setCarResponse'> <sequence/> </complexType> <element name='getCar' type='tns:getCar'/> <element name='getCarResponse' type='tns:getCarResponse'/> <element name='setCar' type='tns:setCar'/> <element name='setCarResponse' type='tns:setCarResponse'/> </schema> </types> <message name='CarWS_getCarResponse'> <part element='tns:getCarResponse' name='result'/> </message> <message name='CarWS_setCar'> <part element='tns:setCar' name='parameters'/> </message> <message name='CarWS_setCarResponse'> <part element='tns:setCarResponse' name='result'/> </message> <message name='CarWS_getCar'> <part element='tns:getCar' name='parameters'/> </message> <portType name='CarWS'> <operation name='getCar'> <input message='tns:CarWS_getCar'/> <output message='tns:CarWS_getCarResponse'/> </operation> <operation name='setCar'> <input message='tns:CarWS_setCar'/> <output message='tns:CarWS_setCarResponse'/> </operation> </portType> <binding name='CarWSBinding' type='tns:CarWS'> <soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='getCar'> <soap:operation soapAction=''/> <input> <soap:body use='literal'/> </input> <output> <soap:body use='literal'/> </output> </operation> <operation name='setCar'> <soap:operation soapAction=''/> <input> <soap:body use='literal'/> </input> <output> <soap:body use='literal'/> </output> </operation> </binding> <service name='CarWSService'> <port binding='tns:CarWSBinding' name='CarWSPort'> <soap:address location='http://localhost:8280/facade/CarWS'/> </port> </service> </definitions>
The webservice class:
@Stateless
@WebService(wsdlLocation="META-INF/wsdl/CarWS.wsdl")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class CarWS extends WSBean {
@WebMethod
public CarType getCar(){
CarType car = new CarType();
car.setColor(CarColor.RED);
return car;
}
@WebMethod
public void setCar(CarType car){
System.out.println("carcolor = " + car.getColor());
}
}and the two element type implementations:
@XmlAccessorType(AccessType.FIELD)
@XmlType(name = "CarType", propOrder = {
"color"
})
public class CarType {
@XmlElement(name = "color")
protected CarColor color;
public CarColor getColor() {
return color;
}
public void setColor(CarColor color) {
this.color = color;
}
}
public class CarColor implements java.io.Serializable {
private java.lang.String _value_;
private static HashMap<String, Object> _table_ = new HashMap<String, Object>();
public static final java.lang.String _RED = "red";
public static final java.lang.String _GREEN = "green";
public static final CarColor RED = new CarColor(_RED);
public static final CarColor GREEN = new CarColor(_GREEN);
public CarColor(){}
// Constructor
protected CarColor(java.lang.String value) {
_value_ = value;
_table_.put(_value_, this);
}
public java.lang.String getValue() {
return _value_;
}
public static CarColor fromValue(java.lang.String value) throws java.lang.IllegalArgumentException {
CarColor enumeration = (CarColor) _table_.get(value);
if (enumeration == null)
throw new java.lang.IllegalArgumentException();
return enumeration;
}
public static CarColor fromString(java.lang.String value) throws java.lang.IllegalArgumentException {
return fromValue(value);
}
public boolean equals(java.lang.Object obj) {
return (obj == this);
}
public int hashCode() {
return toString().hashCode();
}
public java.lang.String toString() {
return _value_;
}
public java.lang.Object readResolve() throws java.io.ObjectStreamException {
return fromValue(_value_);
}
}Can any of you see what I'm doing wrong?