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?