NoSuchMethodError on TypeBinding.setBeforeMarshallingCallbac
joshlam Feb 22, 2007 12:47 AMHi,
I have created a web service using jbossws and hosted on jboss-4.0.5.GA on WinXP and with the wstool generated the client artifacts. No problem invoking the web service using SOAPUI tool. But when I tried to execute the client code, upon call
Service service = serviceFactory.createService(wsdlURL, SERVICE_NAME, jaxrpcURL); (pls see the client code below)
The following exception was thrown:
java.lang.NoSuchMethodError: org.jboss.xb.binding.sunday.unmarshalling.TypeBinding.setBeforeMarshallingCallback(Lorg/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingCallback;)V at org.jboss.ws.xop.JBossXBContentAdapter.register(JBossXBContentAdapter.java:210) at org.jboss.ws.jbossxb.SchemaBindingBuilder.buildSchemaBinding(SchemaBindingBuilder.java:85) at org.jboss.ws.metadata.ServiceMetaData.getSchemaBinding(ServiceMetaData.java:343) at org.jboss.ws.metadata.ServiceMetaData.eagerInitialize(ServiceMetaData.java:442) at org.jboss.ws.metadata.UnifiedMetaData.eagerInitialize(UnifiedMetaData.java:183) at org.jboss.ws.deployment.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:132) at org.jboss.ws.deployment.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:85) at org.jboss.ws.jaxrpc.ServiceImpl.<init>(ServiceImpl.java:96) at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:158) at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:143) at com.intuit.sds.prs.webservices.std.client.StdClientTest.testWebservice(StdClientTest.java:40) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Here is my client code (in the form of a junit test)
package com.intuit.sds.prs.webservices.std.client; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.Call; import javax.xml.rpc.Service; import javax.xml.rpc.ServiceException; import org.apache.log4j.xml.DOMConfigurator; import org.jboss.ws.jaxrpc.ServiceFactoryImpl; import com.intuit.sds.prs.webservices.AddressContactMethod; import com.intuit.sds.prs.webservices.StandardizeAddressResponse; import junit.framework.TestCase; public class StdClientTest extends TestCase { private static final String WSDL_LOCATION = "http://localhost:8080/StdWebserviceImpl-2/StandardizeAddressSLSBEndPoint?wsdl"; private static String NAMESPACE = "http://com.intuit.sds.prs/webservices"; private static final QName SERVICE_NAME = new QName(NAMESPACE, "StandardizeAddressWebService"); public void testWebservice() { System.setProperty("javax.xml.rpc.ServiceFactory", "org.jboss.webservice.client.ServiceFactoryImpl"); DOMConfigurator.configure("./src/log4j.xml"); AddressContactMethod addr = new AddressContactMethod(); try { URL wsdlURL = new URL(WSDL_LOCATION); URL jaxrpcURL = null; jaxrpcURL = new File("src/jaxrpc-mapping.xml").toURL(); ServiceFactoryImpl serviceFactory = new ServiceFactoryImpl(); Service service = serviceFactory.createService(wsdlURL, SERVICE_NAME, jaxrpcURL); Call call = service.createCall(); QName operationName = new QName(NAMESPACE, "standardizeAddress"); call.setOperationName(operationName); //Test the call StandardizeAddressResponse ctr = (StandardizeAddressResponse) call.invoke(new Object[]{addr}); AddressContactMethod rAddr = ctr.getResult(); System.out.println("Addr1: " + rAddr.getAddr1()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Here the following is the wsdl and the jaxrpc-mapping.xml respectively
<definitions name="StandardizeAddressWebService" targetNamespace="http://com.intuit.sds.prs/webservices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com.intuit.sds.prs/webservices" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <types> <schema elementFormDefault="qualified" targetNamespace="http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://com.intuit.sds.prs/webservices" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <import namespace="http://com.intuit.sds.prs/webservices" /> <complexType name="AddressContactMethod"> <sequence> <element name="addr1" nillable="true" type="string" /> <element name="addr2" nillable="true" type="string" /> <element name="city" nillable="true" type="string" /> <element name="countryCode" nillable="true" type="string" /> <element name="postalCode" nillable="true" type="string" /> <element name="postalCodeExt" nillable="true" type="string" /> <element name="stateProvince" nillable="true" type="string" /> </sequence> </complexType> <complexType name="IndividualName"> <sequence> <element name="firstName" nillable="true" type="string" /> <element name="lastName" nillable="true" type="string" /> </sequence> </complexType> </schema> <schema elementFormDefault="qualified" targetNamespace="http://com.intuit.sds.prs/webservices" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://com.intuit.sds.prs/webservices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <import namespace="http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws" /> <complexType name="standardizeAddress"> <sequence> <element name="AddressContactMethod_1" nillable="true" type="ns2:AddressContactMethod" /> </sequence> </complexType> <complexType name="standardizeAddressResponse"> <sequence> <element name="result" nillable="true" type="ns2:AddressContactMethod" /> </sequence> </complexType> <complexType name="standardizeName"> <sequence> <element name="IndividualName_1" nillable="true" type="ns2:IndividualName" /> </sequence> </complexType> <complexType name="standardizeNameResponse"> <sequence> <element name="result" nillable="true" type="ns2:IndividualName" /> </sequence> </complexType> <element name="standardizeAddress" type="tns:standardizeAddress" /> <element name="standardizeAddressResponse" type="tns:standardizeAddressResponse" /> <element name="standardizeName" type="tns:standardizeName" /> <element name="standardizeNameResponse" type="tns:standardizeNameResponse" /> </schema> </types> <message name="EndpointInterface_standardizeName"> <part element="tns:standardizeName" name="parameters" /> </message> <message name="EndpointInterface_standardizeNameResponse"> <part element="tns:standardizeNameResponse" name="result" /> </message> <message name="EndpointInterface_standardizeAddressResponse"> <part element="tns:standardizeAddressResponse" name="result" /> </message> <message name="EndpointInterface_standardizeAddress"> <part element="tns:standardizeAddress" name="parameters" /> </message> <portType name="EndpointInterface"> <operation name="standardizeAddress"> <input message="tns:EndpointInterface_standardizeAddress" /> <output message="tns:EndpointInterface_standardizeAddressResponse" /> </operation> <operation name="standardizeName"> <input message="tns:EndpointInterface_standardizeName" /> <output message="tns:EndpointInterface_standardizeNameResponse" /> </operation> </portType> <binding name="EndpointInterfaceBinding" type="tns:EndpointInterface"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="standardizeAddress"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="standardizeName"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="StandardizeAddressWebService"> <port binding="tns:EndpointInterfaceBinding" name="EndpointInterfacePort"> <soap:address location="http://SDGL04301034:8080/StdWebserviceImpl-2/StandardizeAddressSLSBEndPoint" /> </port> </service> </definitions>
<?xml version='1.0' encoding='UTF-8'?><java-wsdl-mapping version='1.1' xmlns='http://java.sun.com/xml/ns/j2ee' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd'> <package-mapping> <package-type>com.intuit.sds.prs.webservices</package-type> <namespaceURI>http://com.intuit.sds.prs/webservices</namespaceURI> </package-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.StandardizeAddress</java-type> <root-type-qname xmlns:typeNS='http://com.intuit.sds.prs/webservices'>typeNS:standardizeAddress</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>addressContactMethod_1</java-variable-name> <xml-element-name>AddressContactMethod_1</xml-element-name> </variable-mapping> </java-xml-type-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.AddressContactMethod</java-type> <root-type-qname xmlns:typeNS='http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws'>typeNS:AddressContactMethod</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>addr1</java-variable-name> <xml-element-name>addr1</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>addr2</java-variable-name> <xml-element-name>addr2</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>city</java-variable-name> <xml-element-name>city</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>countryCode</java-variable-name> <xml-element-name>countryCode</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>postalCode</java-variable-name> <xml-element-name>postalCode</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>postalCodeExt</java-variable-name> <xml-element-name>postalCodeExt</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>stateProvince</java-variable-name> <xml-element-name>stateProvince</xml-element-name> </variable-mapping> </java-xml-type-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.StandardizeAddressResponse</java-type> <root-type-qname xmlns:typeNS='http://com.intuit.sds.prs/webservices'>typeNS:standardizeAddressResponse</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>result</java-variable-name> <xml-element-name>result</xml-element-name> </variable-mapping> </java-xml-type-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.StandardizeName</java-type> <root-type-qname xmlns:typeNS='http://com.intuit.sds.prs/webservices'>typeNS:standardizeName</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>individualName_1</java-variable-name> <xml-element-name>IndividualName_1</xml-element-name> </variable-mapping> </java-xml-type-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.IndividualName</java-type> <root-type-qname xmlns:typeNS='http://objects.interfaces.ws.standardization.prs.sds.intuit.com/jaws'>typeNS:IndividualName</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>firstName</java-variable-name> <xml-element-name>firstName</xml-element-name> </variable-mapping> <variable-mapping> <java-variable-name>lastName</java-variable-name> <xml-element-name>lastName</xml-element-name> </variable-mapping> </java-xml-type-mapping> <java-xml-type-mapping> <java-type>com.intuit.sds.prs.webservices.StandardizeNameResponse</java-type> <root-type-qname xmlns:typeNS='http://com.intuit.sds.prs/webservices'>typeNS:standardizeNameResponse</root-type-qname> <qname-scope>complexType</qname-scope> <variable-mapping> <java-variable-name>result</java-variable-name> <xml-element-name>result</xml-element-name> </variable-mapping> </java-xml-type-mapping> <service-interface-mapping> <service-interface>com.intuit.sds.prs.webservices.StandardizeAddressWebService</service-interface> <wsdl-service-name xmlns:serviceNS='http://com.intuit.sds.prs/webservices'>serviceNS:StandardizeAddressWebService</wsdl-service-name> <port-mapping> <port-name>EndpointInterfacePort</port-name> <java-port-name>EndpointInterfacePort</java-port-name> </port-mapping> </service-interface-mapping> <service-endpoint-interface-mapping> <service-endpoint-interface>com.intuit.sds.prs.webservices.EndpointInterface</service-endpoint-interface> <wsdl-port-type xmlns:portTypeNS='http://com.intuit.sds.prs/webservices'>portTypeNS:EndpointInterface</wsdl-port-type> <wsdl-binding xmlns:bindingNS='http://com.intuit.sds.prs/webservices'>bindingNS:EndpointInterfaceBinding</wsdl-binding> <service-endpoint-method-mapping> <java-method-name>standardizeAddress</java-method-name> <wsdl-operation>standardizeAddress</wsdl-operation> <wrapped-element/> <method-param-parts-mapping> <param-position>0</param-position> <param-type>com.intuit.sds.prs.webservices.AddressContactMethod</param-type> <wsdl-message-mapping> <wsdl-message xmlns:wsdlMsgNS='http://com.intuit.sds.prs/webservices'>wsdlMsgNS:EndpointInterface_standardizeAddress</wsdl-message> <wsdl-message-part-name>AddressContactMethod_1</wsdl-message-part-name> <parameter-mode>IN</parameter-mode> </wsdl-message-mapping> </method-param-parts-mapping> <wsdl-return-value-mapping> <method-return-value>com.intuit.sds.prs.webservices.AddressContactMethod</method-return-value> <wsdl-message xmlns:wsdlMsgNS='http://com.intuit.sds.prs/webservices'>wsdlMsgNS:EndpointInterface_standardizeAddressResponse</wsdl-message> <wsdl-message-part-name>result</wsdl-message-part-name> </wsdl-return-value-mapping> </service-endpoint-method-mapping> <service-endpoint-method-mapping> <java-method-name>standardizeName</java-method-name> <wsdl-operation>standardizeName</wsdl-operation> <wrapped-element/> <method-param-parts-mapping> <param-position>0</param-position> <param-type>com.intuit.sds.prs.webservices.IndividualName</param-type> <wsdl-message-mapping> <wsdl-message xmlns:wsdlMsgNS='http://com.intuit.sds.prs/webservices'>wsdlMsgNS:EndpointInterface_standardizeName</wsdl-message> <wsdl-message-part-name>IndividualName_1</wsdl-message-part-name> <parameter-mode>IN</parameter-mode> </wsdl-message-mapping> </method-param-parts-mapping> <wsdl-return-value-mapping> <method-return-value>com.intuit.sds.prs.webservices.IndividualName</method-return-value> <wsdl-message xmlns:wsdlMsgNS='http://com.intuit.sds.prs/webservices'>wsdlMsgNS:EndpointInterface_standardizeNameResponse</wsdl-message> <wsdl-message-part-name>result</wsdl-message-part-name> </wsdl-return-value-mapping> </service-endpoint-method-mapping> </service-endpoint-interface-mapping> </java-wsdl-mapping>
The why I got this is to use wstool in an ant script:
<wstool config="./config.xml" dest="${gensrc.dir}"> <classpath> <path refid="compile.classpath" /> </classpath> </wstool>
The config.xml used is:
<?xml version="1.0" encoding="UTF-8"?> <!-- wstools -config wstools-config.xml --> <configuration xmlns="http://www.jboss.org/jbossws-tools" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.org/jbossws-tools http://www.jboss.org/jbossws-tools/schema/jbossws-tool_1_0.xsd"> <wsdl-java location="src/main/resources/TestService.wsdl"> <mapping file="../resources/META-INF/jaxrpc-mapping.xml" /> </wsdl-java> </configuration>
Would greatly appreciate any help on this.
Thanks.
--
Josh