I ran into a - to me - confusing situation while I tried to mock an existing webservice.
Abstract
I am trying to mock an Sharepoint webservice using the generated interfaces from the WSDL of that service. This somehow fails. Naively, I simply set up a webservice EJB implementing the interface that has been generated from the WSDL.
1. Setup
We have a JEE Application on JBoss 7. It consumes a SOAP Service provided by Sharepoint DMS. We encapsulated the WSDL API into a standalone DMS API JAR using maven and the CXF plugin. This DMS API is used within a call factory which creates a DocumentSoap from that object - this is a real SOAP client used by the JEE App.
2. Mock
For integration test purpose we ship another EJB application together with the product EAR. This other EJB contains services, servlets, data fixtures etc pp. And it shall contain a mock webservice. The webservice should match the specification of the Sharepoint webservice.
3. What I did
I set up a new Webservice Bean using the DMS API jar. It looks like this
/**
* Created by me on 23.02.2016.
*/
#WebService(portName = "documentPort"
, serviceName = "Documents"
, targetNamespace = "http://FooService.SharePoint.API.Webservices.Documents"
, name = "Documents"
, endpointInterface = "de.customer.ws.fooservice.documents.DocumentsSoap")
#Stateless
#Local(DocumentsSoap.class)
public class DmsMockDocumentWebServiceImpl implements DocumentsSoap {
}
Then I (successfully) can replace the URL in the call factory with the wdsl location of my bean. So far, so good.
4. The Problem
But when I try to access the mock service, I get this error:
14:14:51,404 SEVERE [de.customer.ws.onlineanbindung.FooServiceCallFactory] (EJB default - 7) Java Fehlermeldung: javax.xml.ws.WebServiceException: Could not find service named {http://FooService.SharePoint.API.Webservices.Documents/}Documents in wsdl http://localhost:8080/ProofCenterTestSuite/Documents/Documents?wsdl
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:159) [cxf-rt-frontend-jaxws-2.4.8-patch-01.jar:2.4.8-patch-01]
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147) [cxf-rt-frontend-jaxws-2.4.8-patch-01.jar:2.4.8-patch-01]
at org.jboss.wsf.stack.cxf.client.ProviderImpl.createServiceDelegate(ProviderImpl.java:141)
at javax.xml.ws.Service.<init>(Service.java:57) [jboss-jaxws-api_2.2_spec-2.0.1.Final.jar:2.0.1.Final]
at de.customer.ws.fooservice.documents.Documents.<init>(Documents.java:31) [DMS-API-2.6.6.5-SNAPSHOT.jar:]
at de.customer.ws.onlineanbindung.FooServiceCallFactory.getDocuments(FooServiceCallFactory.java:121) [PROOFCenter-EJB.jar:]
at de.customer.ws.onlineanbindung.FooServiceCallFactory.createDocumentsClient(FooServiceCallFactory.java:88) [PROOFCenter-EJB.jar:]
at de.customer.ws.onlineanbindung.FooServiceCallFactory.getDocumentClient(FooServiceCallFactory.java:79) [PROOFCenter-EJB.jar:]
at de.customer.ws.onlineanbindung.FooServiceCallFactory.add(FooServiceCallFactory.java:214) [PROOFCenter-EJB.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_45]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_45]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:200) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:188) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:76) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:42) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:32) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:181) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at de.customer.ws.onlineanbindung.FooServiceCallFactory$$$view1204.add(Unknown Source) [PROOFCenter-EJB.jar:]
at de.customer.ws.onlineanbindung.FakturaDocumentStorer.storeDocument(FakturaDocumentStorer.java:47) [PROOFCenter-EJB.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_45]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_45]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:226) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:302) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:188) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:76) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:42) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:43) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:181) [jboss-as-ee-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.AsyncFutureInterceptorFactory$1$1.runInvocation(AsyncFutureInterceptorFactory.java:77) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at org.jboss.as.ejb3.component.interceptors.AsyncInvocationTask.run(AsyncInvocationTask.java:73) [jboss-as-ejb3-7.1.3.Final.jar:7.1.3.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
WSDL local vs. remote
My locally generated WSDL from the same interfaces vastly differs from the one provided by Sharepoint.
Local
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="Documents" targetNamespace="http://FooService.SharePoint.API.Webservices.Documents" xmlns:ns1="http://FooService.SharePoint.API.Webservices.Documents/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://FooService.SharePoint.API.Webservices.Documents" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:import location="http://localhost:8080/TheProductTestSuite/Documents/Documents?wsdl=DocumentsSoap.wsdl" namespace="http://FooService.SharePoint.API.Webservices.Documents/">
</wsdl:import>
<wsdl:binding name="DocumentsSoapBinding" type="ns1:DocumentsSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="AddLinkedFile">
<soap:operation soapAction="http://FooService.SharePoint.API.Webservices.Documents/AddLinkedFile" style="document"/>
<wsdl:input name="AddLinkedFile">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="AddLinkedFileResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="UploadDocumentBySearchPath">
<soap:operation soapAction="http://FooService.SharePoint.API.Webservices.Documents/UploadDocumentBySearchPath" style="document"/>
<wsdl:input name="UploadDocumentBySearchPath">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="UploadDocumentBySearchPathResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation> ...
The original WSDL loaded by the call factory looks like this:
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://FooService.SharePoint.API.Webservices.Documents/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s1="http://microsoft.com/wsdl/types/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://FooService.SharePoint.API.Webservices.Documents/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://FooService.SharePoint.API.Webservices.Documents/">
<s:import namespace="http://microsoft.com/wsdl/types/" />
<s:element name="GetDocumentInformationByURL">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="documentURL" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetDocumentInformationByURLResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetDocumentInformationByURLResult" type="tns:DocumentInfo" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="DocumentInfo">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="VersionLabel" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="IsConvertedFile" type="s:boolean" />
<s:element minOccurs="1" maxOccurs="1" name="TotalLength" type="s:long" />
<s:element minOccurs="0" maxOccurs="1" name="URL" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="UniqueID" type="s1:guid" />
<s:element minOccurs="1" maxOccurs="1" name="ListItemID" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="ListID" type="s1:guid" />
<s:element minOccurs="0" maxOccurs="1" name="FilePath" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="DependentFiles" type="tns:ArrayOfDependentFile" />
<s:element minOccurs="0" maxOccurs="1" name="Content" type="tns:Content" />
<s:element minOccurs="1" maxOccurs="1" name="IsLinked" type="s:boolean" />
<s:element minOccurs="1" maxOccurs="1" name="IsArchived" type="s:boolean" />
<s:element minOccurs="1" maxOccurs="1" name="CheckedOutState" type="tns:SPCheckOutStatus" />
</s:sequence>
</s:complexType>
....
Big Question
Since I generated the DMS API jar from the Sharepoint WSDL, how can it be, that an EJB service implementing that API so vastly differs to the original, that it won't be accepted as a replacement?
Am I missing crucial points? Or is it simply a generation problem - means : A java client API carrying the webservice infos will never result in an EJB webservice matching the prior specification?
Thanks in advance!
The implementation of Java EE you're using is different from Sharepoint's WSDL generation implementation. It's normal for SOAP frameworks to differ as there's no single standard for WSDL generation. Only the WSDL language is standardized. Versions differ as well. If you like you can put the WSDL file in the WEB-INF/wsdl directory of your application and then use something like #WebService(wsdlLocation="yourwsdl.wsdl") in the EJB.
Related
I have setup BPS and have created a few BPEL processes which i can use to invoke services on the Application Server. I have created a REST service on the ESB and a REST service I wrote by Java Spring Boot and I have the problem.
My setup in BPS only can run with REST service on the ESB, cannot run with REST service by Java.
When I use the REST by Java, I saw the log:
"ERROR {org.wso2.carbon.bpel.core.ode.integration.PartnerService} - Error sending message to Axis2 for ODE mex {PartnerRoleMex#hqejbhcnphrfigtpcgkgif [PID {http://wso2.org/bps/sample}CallRestJava-383] calling org.apache.ode.bpel.epr.WSAEndpoint#3807729c.getParam(...) Status REQUEST}
java.lang.NullPointerException
at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processSchemaList(XmlNodeGenerator.java:60)
at org.apache.axis2.json.gson.factory.XmlNodeGenerator.getMainXmlNode(XmlNodeGenerator.java:258)
at org.apache.axis2.json.gson.GsonXMLStreamReader.process(GsonXMLStreamReader.java:162)
at org.apache.axis2.json.gson.GsonXMLStreamReader.initXmlStreamReader(GsonXMLStreamReader.java:108)
at org.apache.axis2.json.gson.JSONMessageHandler.invoke(JSONMessageHandler.java:81)
at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
at org.apache.axis2.engine.Phase.invoke(Phase.java:313)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:359)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:445)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
at org.wso2.carbon.bpel.core.ode.integration.HTTPBindingHandler.invoke(HTTPBindingHandler.java:118)
at org.wso2.carbon.bpel.core.ode.integration.PartnerService.invoke(PartnerService.java:264)
at org.wso2.carbon.bpel.core.ode.integration.BPELMessageExchangeContextImpl.invokePartner(BPELMessageExchangeContextImpl.java:43)
at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:897)
at org.apache.ode.bpel.runtime.INVOKE.run(INVOKE.java:140)
at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:1002)
at org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeNewInstance(PartnerLinkMyRoleImpl.java:208)
at org.apache.ode.bpel.engine.BpelProcess$1.invoke(BpelProcess.java:283)
at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:224)
at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:279)
at org.apache.ode.bpel.engine.BpelProcess.handleJobDetails(BpelProcess.java:434)
at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:558)
at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:467)
at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:633)
at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:627)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:298)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:253)
at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:627)
at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:611)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)"
Both of REST service is only get information of user from database
"http://localhost:8082/user/id/{id}"
"http://localhost:8281/services/user_service/insert/{id}"
And this is my BPS setup to call the REST service
"<wsdl:definitions name="UserService" targetNamespace="http://www.example.org/UserService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.example.org/UserService/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">
wsdl:types<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/UserService/">
<xsd:element name="userID">
xsd:complexType
xsd:sequence
<xsd:element name="id" type="xsd:int"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="user">
xsd:complexType
xsd:sequence
<xsd:element name="id" type="xsd:int"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="email" type="xsd:string"></xsd:element>
<xsd:element name="address" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema></wsdl:types>
<wsdl:message name="getParamRequest">
<wsdl:part name="userID" element="tns:userID"></wsdl:part>
</wsdl:message>
<wsdl:message name="getParamResponse">
<wsdl:part name="result" element="tns:user"></wsdl:part>
</wsdl:message>
<wsdl:portType name="UserGetPortType">
<wsdl:operation name="getParam">
<wsdl:input message="tns:getParamRequest"></wsdl:input>
<wsdl:output message="tns:getParamResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="UserGetBinding" type="tns:UserGetPortType">
<http:binding verb="GET" />
<wsdl:operation name="getParam">
<http:operation location="http://localhost:8082/user/id/{id}" />
wsdl:input
http:urlReplacement/
</wsdl:input>
wsdl:output
<mime:content part="result" type="text/xml"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserGetService">
<wsdl:port name="UserGetPort" binding="tns:UserGetBinding">
<http:address location="http://localhost:8082/user/id/1"/>
</wsdl:port>
</wsdl:service></wsdl:definitions>"
So every ideas are very good for me now. Thanks!!!
i have a web service that returns data but i cannot find a way how to choose the fields that returns from the web service.
i have param-in that i send to the web service and i'm getting fields parameters as param-out.
this is how i'm parsing it:
<Query>
<Method Name="methodname" Namespace="namespacename">
<Paramenters>
<Parameter Name="param-in-name-1">
<DefaultValue>0</DefaultValue>
</Parameter>
<Parameter Name="param-in-name-2">
<DefaultValue>0</DefaultValue>
</Parameter>
</Parameters>
</Method>
<ElementPath IgnoreNamespace="true">
*
</ElementPath>
</Query>
this parsing above brings all fields but i need to take specific fields.
i tried to add this below to the elementpath but it didnt work:
/elementname1{}/elementname2{}/fieldname1
I realized that its really depend on the web service schema
for example,
this schema that i made more complex by adding nested parameters:
<wsdl:types>
<s:schema targetNamespace="VS13" elementFormDefault="qualified">
<s:element name="datatable">
<s:complexType>
<s:sequence>
<s:element name="prmin" type="tns:paramin" maxOccurs="1" minOccurs="0"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="paramin">
<s:sequence>
<s:element name="name" type="s:string" maxOccurs="1" minOccurs="0"/>
<s:element name="age" type="s:int" maxOccurs="1" minOccurs="1"/>
<s:element name="height" type="s:int" maxOccurs="1" minOccurs="1"/>
</s:sequence>
</s:complexType>
<s:element name="datatableResponse">
<s:complexType>
<s:sequence>
<s:element name="datatableResult" type="tns:data" maxOccurs="1" minOccurs="0"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="data">
<s:sequence>
<s:element name="name" type="s:string" maxOccurs="1" minOccurs="0"/>
<s:element name="age" type="s:int" maxOccurs="1" minOccurs="1"/>
<s:element name="ltr" type="tns:ArrayOfLetters" maxOccurs="1" minOccurs="0"/>
<s:element name="height" type="s:int" maxOccurs="1" minOccurs="1"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfLetters">
<s:sequence>
<s:element name="letters" type="tns:letters" maxOccurs="unbounded" minOccurs="0"/>
</s:sequence>
</s:complexType>
<s:complexType name="letters">
<s:sequence>
<s:element name="letter" type="s:string" maxOccurs="1" minOccurs="0"/>
<s:element name="count" type="s:int" maxOccurs="1" minOccurs="1"/>
</s:sequence>
</s:complexType>
</s:schema>
</wsdl:types>
i made it more complicated by sending parameters from the second layer(parameters inside a class/element):
<Query>
<Method Name="datatable" Namespace="VS13" >
<Parameters>
<Parameter Name="prmin" Type="xml">
<DefaultValue>
<name>stiv</name>
<age>30</age>
<height>180</height>
</DefaultValue>
</Parameter>
</Parameters>
</Method>
there are 2 ways for me to implement the data retrieved from the xmldp query
1.second layer without the array data field:
<ElementPath IgnoreNamespaces="True">
datatableResponse/datatableResult
</ElementPath>
2.second layer only the array data field:
<ElementPath IgnoreNamespaces="True">
datatableResponse/datatableResult{}/ltr/letters{letter,count}
</ElementPath>
I am trying to consume external Web service(WSDL FILE) in sap for data integration when i tired to create client proxy in sap and gives service provider webservice URL http://172.31.3.48:8717/?wsdl it gives me proxy generation error it giving me a error of "liberary haldler exception" " incorrect value: unknown namespace http://www.w3.org/2001/xmlschema" . I am facing this error in just in this file which provided by my services provider , except this all of the wsdl file generated successfully one the file which generated suceesfully is this http://www.webservicex.net/stockquote.asmx?WSDL.
your help will be appreciated.
Given below is my Wsdl file which giving me error..
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://tempuri.org/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="GetData">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="user" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="pass" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="fromdate" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="todate" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetDataResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetDataResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema"/>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="GetDataSoapIn">
<wsdl:part name="parameters" element="tns:GetData"/>
</wsdl:message>
<wsdl:message name="GetDataSoapOut">
<wsdl:part name="parameters" element="tns:GetDataResponse"/>
</wsdl:message>
<wsdl:portType name="WSCRPL9001Soap">
<wsdl:operation name="GetData">
<wsdl:input message="tns:GetDataSoapIn"/>
<wsdl:output message="tns:GetDataSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WSCRPL9001Soap" type="tns:WSCRPL9001Soap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetData">
<soap:operation soapAction="http://tempuri.org/GetData" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WSCRPL9001Soap12" type="tns:WSCRPL9001Soap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetData">
<soap12:operation soapAction="http://tempuri.org/GetData" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WSCRPL9001">
<wsdl:port name="WSCRPL9001Soap" binding="tns:WSCRPL9001Soap">
<soap:address location="http://172.31.3.48:8717/WS-CRPL-9001.asmx"/>
</wsdl:port>
<wsdl:port name="WSCRPL9001Soap12" binding="tns:WSCRPL9001Soap12">
<soap12:address location="http://172.31.3.48:8717/WS-CRPL-9001.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Something seems off with this element. An element that directly references the schema is pretty strange to me - I've never seen such structure:
<s:element name="GetDataResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetDataResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
I've validated your WSDL in Eclipse - see what Eclipse says for this WSDL:
Error resolving component 's:schema'. It was detected that 's:schema' is in namespace 'http://www.w3.org/2001/XMLSchema', but components from this namespace are not referenceable from schema document 'file:///WSDLTEST.wsdl'. If this is the incorrect namespace, perhaps the prefix of 's:schema' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should be added to 'file:///WSDL.wsdl'.
Try removing <s:element ref="s:schema" /> line altogether and see if it works for you. Or describe the sequence element by element the way it's been done for the request GetData.
I'm having an huge problem with the my web service.
When I try to generate the files via svcutil I get the following error messages:
Attempting to download metadata from 'http://srv:13208/GROUPING_WS_ASMX.as
mx' using WS-Metadata Exchange or DISCO.
Error: Cannot import wsdl:binding
Detail: The required WSDL extension element 'binding' from namespace 'http://sch
emas.xmlsoap.org/wsdl/http/' was not handled.
XPath to Error Source: //wsdl:definitions[#targetNamespace='http://grouping/']/wsdl:binding[#name='GROUPING_WS_ASMXHttpGet']
Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend
ent on.
XPath to wsdl:binding: //wsdl:definitions[#targetNamespace='http://grouping/']/wsdl:binding[#name='GROUPING_WS_ASMXHttpGet']
XPath to Error Source: //wsdl:definitions[#targetNamespace='http://grouping/']/wsdl:service[#name='GROUPING_WS_ASMX']/wsdl:port[#name='GROUPING_WS_ASM
XHttpGet']
Error: Cannot import wsdl:binding
Detail: The required WSDL extension element 'binding' from namespace 'http://sch
emas.xmlsoap.org/wsdl/http/' was not handled.
XPath to Error Source: //wsdl:definitions[#targetNamespace='http://grouping/']/wsdl:binding[#name='GROUPING_WS_ASMXHttpPost']
Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend
ent on.
XPath to wsdl:binding: //wsdl:definitions[#targetNamespace='http://grouping/']/wsdl:binding[#name='GROUPING_WS_ASMXHttpPost']
XPath to Error Source: //wsdl:definitions[#targetNamespace='http://grouping']/wsdl:service[#name='GROUPING_WS_ASMX']/wsdl:port[#name='GROUPING_WS_ASM
XHttpPost']
Here is my WSDL definition:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://grouping/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://grouping/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/">
<wsdl:types><s:schema targetNamespace="http://grouping/" elementFormDefault="qualified">
<s:element name="OnClick_GroupProducts"><s:complexType><s:sequence><s:element name="quoteProductsId" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence></s:complexType></s:element><s:element name="OnClick_GroupProductsResponse">
<s:complexType><s:sequence><s:element name="OnClick_GroupProductsResult" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="OnClick_UpdateGroupProduct">
<s:complexType>
<s:sequence>
<s:element name="quoteProductsId" type="s:string" maxOccurs="1" minOccurs="0"/><s:element name="groupname" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence></s:complexType>
</s:element><s:element name="OnClick_UpdateGroupProductResponse">
<s:complexType/>
</s:element>
<s:element name="OnLoad_GetProductGroups">
<s:complexType>
<s:sequence>
<s:element name="quoteProductId" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="OnLoad_GetProductGroupsResponse">
<s:complexType>
<s:sequence>
<s:element name="OnLoad_GetProductGroupsResult" type="tns:ArrayOfString" maxOccurs="1" minOccurs="0"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfString">
<s:sequence>
<s:element name="string" type="s:string" maxOccurs="unbounded" minOccurs="0" nillable="true"/>
</s:sequence></s:complexType><s:element name="string" type="s:string" nillable="true"/>
<s:element name="ArrayOfString" type="tns:ArrayOfString" nillable="true"/>
</s:schema></wsdl:types><wsdl:message name="OnClick_GroupProductsSoapIn">
<wsdl:part name="parameters" element="tns:OnClick_GroupProducts"/>
</wsdl:message><wsdl:message name="OnClick_GroupProductsSoapOut">
<wsdl:part name="parameters" element="tns:OnClick_GroupProductsResponse"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductSoapIn"><wsdl:part name="parameters" element="tns:OnClick_UpdateGroupProduct"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductSoapOut"><wsdl:part name="parameters" element="tns:OnClick_UpdateGroupProductResponse"/></wsdl:message>
<wsdl:message name="OnLoad_GetProductGroupsSoapIn"><wsdl:part name="parameters" element="tns:OnLoad_GetProductGroups"/></wsdl:message>
<wsdl:message name="OnLoad_GetProductGroupsSoapOut"><wsdl:part name="parameters" element="tns:OnLoad_GetProductGroupsResponse"/></wsdl:message>
<wsdl:message name="OnClick_GroupProductsHttpGetIn"><wsdl:part name="quoteProductsId" type="s:string"/></wsdl:message>
<wsdl:message name="OnClick_GroupProductsHttpGetOut"><wsdl:part name="Body" element="tns:string"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductHttpGetIn"><wsdl:part name="quoteProductsId" type="s:string"/><wsdl:part name="groupname" type="s:string"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductHttpGetOut"/><wsdl:message name="OnLoad_GetProductGroupsHttpGetIn"><wsdl:part name="quoteProductId" type="s:string"/></wsdl:message>
<wsdl:message name="OnLoad_GetProductGroupsHttpGetOut"><wsdl:part name="Body" element="tns:ArrayOfString"/></wsdl:message>
<wsdl:message name="OnClick_GroupProductsHttpPostIn"><wsdl:part name="quoteProductsId" type="s:string"/></wsdl:message>
<wsdl:message name="OnClick_GroupProductsHttpPostOut"><wsdl:part name="Body" element="tns:string"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductHttpPostIn"><wsdl:part name="quoteProductsId" type="s:string"/><wsdl:part name="groupname" type="s:string"/></wsdl:message>
<wsdl:message name="OnClick_UpdateGroupProductHttpPostOut"/><wsdl:message name="OnLoad_GetProductGroupsHttpPostIn"><wsdl:part name="quoteProductId" type="s:string"/></wsdl:message>
<wsdl:message name="OnLoad_GetProductGroupsHttpPostOut"><wsdl:part name="Body" element="tns:ArrayOfString"/></wsdl:message>
<wsdl:portType name="GROUPING_WS_ASMXSoap"><wsdl:operation name="OnClick_GroupProducts"><wsdl:input message="tns:OnClick_GroupProductsSoapIn"/>
<wsdl:output message="tns:OnClick_GroupProductsSoapOut"/></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct"><wsdl:input message="tns:OnClick_UpdateGroupProductSoapIn"/>
<wsdl:output message="tns:OnClick_UpdateGroupProductSoapOut"/></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups"><wsdl:input message="tns:OnLoad_GetProductGroupsSoapIn"/>
<wsdl:output message="tns:OnLoad_GetProductGroupsSoapOut"/></wsdl:operation></wsdl:portType><wsdl:portType name="GROUPING_WS_ASMXHttpGet"><wsdl:operation name="OnClick_GroupProducts">
<wsdl:input message="tns:OnClick_GroupProductsHttpGetIn"/><wsdl:output message="tns:OnClick_GroupProductsHttpGetOut"/></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct">
<wsdl:input message="tns:OnClick_UpdateGroupProductHttpGetIn"/><wsdl:output message="tns:OnClick_UpdateGroupProductHttpGetOut"/></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups">
<wsdl:input message="tns:OnLoad_GetProductGroupsHttpGetIn"/><wsdl:output message="tns:OnLoad_GetProductGroupsHttpGetOut"/></wsdl:operation></wsdl:portType>
<wsdl:portType name="GROUPING_WS_ASMXHttpPost"><wsdl:operation name="OnClick_GroupProducts"><wsdl:input message="tns:OnClick_GroupProductsHttpPostIn"/>
<wsdl:output message="tns:OnClick_GroupProductsHttpPostOut"/></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct">
<wsdl:input message="tns:OnClick_UpdateGroupProductHttpPostIn"/><wsdl:output message="tns:OnClick_UpdateGroupProductHttpPostOut"/>
</wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups"><wsdl:input message="tns:OnLoad_GetProductGroupsHttpPostIn"/>
<wsdl:output message="tns:OnLoad_GetProductGroupsHttpPostOut"/></wsdl:operation></wsdl:portType><wsdl:binding name="GROUPING_WS_ASMXSoap" type="tns:GROUPING_WS_ASMXSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="OnClick_GroupProducts">
<soap:operation style="document" soapAction="http://grouping/OnClick_GroupProducts"/><wsdl:input>
<soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct">
<soap:operation style="document" soapAction="http://grouping/OnClick_UpdateGroupProduct"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output>
<soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups">
<soap:operation style="document" soapAction="http://grouping/OnLoad_GetProductGroups"/><wsdl:input><soap:body use="literal"/>
</wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="GROUPING_WS_ASMXSoap12" type="tns:GROUPING_WS_ASMXSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="OnClick_GroupProducts">
<soap12:operation style="document" soapAction="http://groupingOnClick_GroupProducts"/><wsdl:input>
<soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct">
<soap12:operation style="document" soapAction="http://grouping/OnClick_UpdateGroupProduct"/><wsdl:input><soap12:body use="literal"/></wsdl:input>
<wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups">
<soap12:operation style="document" soapAction="http://grouping/OnLoad_GetProductGroups"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output>
<soap12:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="GROUPING_WS_ASMXHttpGet" type="tns:GROUPING_WS_ASMXHttpGet">
<http:binding verb="GET"/><wsdl:operation name="OnClick_GroupProducts"><http:operation location="/OnClick_GroupProducts"/><wsdl:input><http:urlEncoded/>
</wsdl:input><wsdl:output><mime:mimeXml part="Body"/></wsdl:output></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct">
<http:operation location="/OnClick_UpdateGroupProduct"/><wsdl:input><http:urlEncoded/></wsdl:input><wsdl:output/></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups">
<http:operation location="/OnLoad_GetProductGroups"/><wsdl:input><http:urlEncoded/></wsdl:input><wsdl:output><mime:mimeXml part="Body"/></wsdl:output></wsdl:operation>
</wsdl:binding><wsdl:binding name="GROUPING_WS_ASMXHttpPost" type="tns:GROUPING_WS_ASMXHttpPost"><http:binding verb="POST"/><wsdl:operation name="OnClick_GroupProducts">
<http:operation location="/OnClick_GroupProducts"/><wsdl:input><mime:content type="application/x-www-form-urlencoded"/></wsdl:input><wsdl:output><mime:mimeXml part="Body"/>
</wsdl:output></wsdl:operation><wsdl:operation name="OnClick_UpdateGroupProduct"><http:operation location="/OnClick_UpdateGroupProduct"/>
<wsdl:input><mime:content type="application/x-www-form-urlencoded"/></wsdl:input><wsdl:output/></wsdl:operation><wsdl:operation name="OnLoad_GetProductGroups">
<http:operation location="/OnLoad_GetProductGroups"/><wsdl:input><mime:content type="application/x-www-form-urlencoded"/></wsdl:input><wsdl:output><mime:mimeXml part="Body"/>
</wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="GROUPING_WS_ASMX"><wsdl:port name="GROUPING_WS_ASMXSoap" binding="tns:GROUPING_WS_ASMXSoap">
<soap:address location="http://srv:13208/GROUPING_WS_ASMX.asmx"/></wsdl:port><wsdl:port name="GROUPING_WS_ASMXSoap12" binding="tns:GROUPING_WS_ASMXSoap12">
<soap12:address location="http://srv:13208/GROUPING_WS_ASMX.asmx"/></wsdl:port><wsdl:port name="GROUPING_WS_ASMXHttpGet" binding="tns:GROUPING_WS_ASMXHttpGet">
<http:address location="http://srv:13208/GROUPING_WS_ASMX.asmx"/></wsdl:port><wsdl:port name="GROUPING_WS_ASMXHttpPost" binding="tns:GROUPING_WS_ASMXHttpPost">
<http:address location="http://srv:13208/GROUPING_WS_ASMX.asmx"/></wsdl:port></wsdl:service></wsdl:definitions>
Any help will be much appreciated.
Best,
Jeppen
Turns out that Silverlight does not like the XHttpPost biding.
So I remvoed this binding in my web.config from the web service and all is up an running.
I am trying to consume .asmx webservice in coldfusion. I can view the WSDL but when trying to access methods it gives me the error:
Webservice Operation ... with parameters ... cannot be found
I have tried to add refreshwsdl = true as stated in other similar stackoverflow questions with no luck.
What am I missing?
<cfinvoke webservice = "urlhere.asmx?wsdl"
method="LoginRequest"
ReturnVariable ="result"
refreshwsdl="true" >
<cfinvokeargument name="oid" value="a">
<cfinvokeargument name="username" value="b">
<cfinvokeargument name="password" value="c">
</cfinvoke>
Here is that part of the WSDL:
<s:schema elementFormDefault="qualified" targetNamespace="http://blahblah">
<s:element name="loginRequest" type="s0:LoginRequest" />
<s:complexType name="LoginRequest">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="oid" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
</s:sequence>
Any ideas ?
Thanks!
You can try with the method described in the below link.
http://www.mindfiresolutions.com/ColdfusionMaking-a-call-to-a-Web-Service-with-complex-object-as-input-parameter-1228.php