How to use the wsdl in wso2esb with addition operation - wsdl

I am using wso2esb4.7.0, I tried with database working fine I wrote the proxyies without publish wsdl option so those working fine .There is no operations publishing that is fine.
Now I wish to publish the operation, for that I wrote a sample wsdl and I place it in my local system downloads folder. When I am importing into proxy its unable to import, if I give any wso2dss wsdl with this url:192.168.1.14:8282/services/user?wsdl the service is working fine and publishing operations also but I dont want to use that wso2dss opeartions, I wish publish my own operation how could I do this
my wsdl file like this
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/Addition.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/Addition.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<message name="SayHelloRequest">
<part name="var1" type="xsd:integer"/>
<part name="var2" type="xsd:integer"/>
</message>
<message name="SayHelloResponse">
<part name="result" type="xsd:integer"/>
</message>
<portType name="Hello_PortType">
<operation name="sayHello">
<input message="tns:SayHelloRequest"/>
<output message="tns:SayHelloResponse"/>
</operation>
</portType>
<binding name="Hello_Binding" type="tns:Hello_PortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/>
<input>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>
</input>
<output>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>
</output>
</operation>
</binding>
<service name="Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding="tns:Hello_Binding" name="Hello_Port">
<soap:address
location="http://www.examples.com/SayHello/">
</port>
</service>
and I am storing this into this path
home/downloads/system/addtion.wsdl
but its not importing its giving errors
where can I store this wsdl for importing into wso2esb

Related

References not found in WSDL

I am using JDeveloper 12.2.1.4 for developing OSB services on Windows.
When I add a new REST adapter, I use the wizards to generate schemas for the request and response. Within the Resources folder, I created a Provinces folder and in the wizard step, I select that as the schema location. The XSD files are created within that folder but the WSDL gives errors that it can't find the schemas and the root elements.
The generated WSDL:
<wsdl:definitions name="LocationServices"
targetNamespace="http://xmlns.oracle.com/ServiceBusApplication1/LocationServices/LocationServices"
xmlns:tns="http://xmlns.oracle.com/ServiceBusApplication1/LocationServices/LocationServices"
xmlns:inp1="http://TargetNamespace.com/LocationServices_getProvinces_request"
xmlns:inp2="http://TargetNamespace.com/LocationServices_getProvinces_response"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<plnk:partnerLinkType name="LocationServices">
<plnk:role name="LocationServicesProvider" portType="tns:LocationServices_ptt"/>
</plnk:partnerLinkType>
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://TargetNamespace.com/LocationServices_getProvinces_request"
schemaLocation="Province-Request.xsd"/>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://TargetNamespace.com/LocationServices_getProvinces_response"
schemaLocation="Province-Response.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getProvinces_inputMessage">
<wsdl:part name="request" element="inp1:Province-Request-Root-Element"/>
</wsdl:message>
<wsdl:message name="getProvinces_outputMessage">
<wsdl:part name="reply" element="inp2:Province-Response-Root-Element"/>
</wsdl:message>
<wsdl:portType name="LocationServices_ptt">
<wsdl:operation name="getProvinces">
<wsdl:input message="tns:getProvinces_inputMessage"/>
<wsdl:output message="tns:getProvinces_outputMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="LocationServices_ptt-binding" type="tns:LocationServices_ptt">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getProvinces">
<soap:operation soapAction="getProvinces"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
The first error of "The resource mapped does not exist" & "Reference to non-existing instance XMLSchema LocationServices/Resources/Province-Request" gets fixed if I change the line to:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://TargetNamespace.com/LocationServices_getProvinces_request"
schemaLocation="**Provinces/**Province-Request.xsd"/>
But the second error of "Reference inp1:Province-Request-Root-Element not found" still remains. Yes, that is the name of the root element in the XSD file.
No where in the source is the folder mentioned, so is the folder named "Resources" a default or something?

How to create a Mule Project v3.8 which redirects messages to an external Web Service?

I would like to create a Mule Project, and the idea is to send a SOAP message (for example through soapUI) to this project, and then, redirect the message to an external web service.
I have read the documentation, I can't figure out how to do this simple task.
I would appreciate if someone could help me. I am using Mule v3.8.
Thanks in advance.
You can use the Web Service Consumer connector as explained at MuleSoft Documentation and Video Tutorial
In general,
You can use:
HTTP endpoint (request-response) ->
CXF component (for you proxy service, optional) ->
Web Service Consumer (to call needed service)
If I'm not very clear, I can help you in building this project.
update
I made a simple service and now we have wsdl:
<wsdl:definitions name="SimpleServiceService" targetNamespace="http://simple/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://simple/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema elementFormDefault="unqualified" targetNamespace="http://simple/" version="1.0" xmlns:tns="http://simple/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="doSomething" type="tns:doSomething"/>
<xs:element name="doSomethingResponse" type="tns:doSomethingResponse"/>
<xs:complexType name="doSomething">
<xs:sequence>
<xs:element minOccurs="0" name="Input" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="doSomethingResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="doSomethingResponse">
<wsdl:part element="tns:doSomethingResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="doSomething">
<wsdl:part element="tns:doSomething" name="parameters"/>
</wsdl:message>
<wsdl:portType name="SimpleService">
<wsdl:operation name="doSomething">
<wsdl:input message="tns:doSomething" name="doSomething"/>
<wsdl:output message="tns:doSomethingResponse" name="doSomethingResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SimpleServiceServiceSoapBinding" type="tns:SimpleService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="doSomething">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="doSomething">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="doSomethingResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SimpleServiceService">
<wsdl:port binding="tns:SimpleServiceServiceSoapBinding" name="SimpleServicePort">
<soap:address location="http://exoldy-simple-mule-project.cloudhub.io/service"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Next we need to interact with this service using proxy service implemented on Mule
<mule xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:ws="http://www.mulesoft.org/schema/mule/ws" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ws http://www.mulesoft.org/schema/mule/ws/current/mule-ws.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd">
<ws:consumer-config name="Web_Service_Consumer" service="SimpleServiceService" port="SimpleServicePort" serviceAddress="http://exoldy-simple-mule-project.cloudhub.io/service" wsdlLocation="http://exoldy-simple-mule-project.cloudhub.io/service?wsdl" doc:name="Web Service Consumer"/>
<http:listener-config name="HTTP_Listener_Configuration1" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="external" initialState="started">
<http:listener config-ref="HTTP_Listener_Configuration1" path="service" doc:name="Receive HTTP request" doc:description="This endpoint receives an HTTP message."/>
<logger message="#[flow.name]" level="INFO" doc:name="Logger"/>
<cxf:proxy-service payload="body" doc:name="CXF" namespace="http://simple/" service="SimpleServiceService" wsdlLocation="http://exoldy-simple-mule-project.cloudhub.io/service?wsdl"/>
<ws:consumer config-ref="Web_Service_Consumer" operation="doSomething" doc:name="Web Service Consumer"/>
</flow>
</mule>
Now everything should work, at least it works for me )

Azure cloud services - The XML specification is not valid

I have two web roles within a cloud service, one to expose outside and one for internal use. The external web role has an MVC web application which will have to connect to the internal web role which will have a Web API. I have the below service definition for my Azure Cloud service.
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureWeb_ExternalCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="ExternalWebApplication" vmsize="A6">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
<Setting name="ServiceBaseURL" />
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
</WebRole>
<WebRole name="InternalWebAPI" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
</ConfigurationSettings>
<Endpoints>
<InternalEndpoint name="Endpoint2" protocol="http" port="8080" />
</Endpoints>
</WebRole>
<NetworkTrafficRules>
<OnlyAllowTrafficTo>
<Destinations>
<RoleEndpoint roleName="InternalWebAPI" endpointName="Endpoint2"/>
</Destinations>
<WhenSource matches="AnyRule">
<FromRole roleName="ExternalWebApplication"/>
</WhenSource>
<AllowAllTraffic/>
</OnlyAllowTrafficTo>
</NetworkTrafficRules>
</ServiceDefinition>
However, I get the below error when I try to build.
The XML specification is not valid: The element 'OnlyAllowTrafficTo'
in namespace
'http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition'
has invalid child element 'AllowAllTraffic' in namespace
'http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition'
According to the ServiceDefinitionSchema (mine is located at %ProgramFiles%\Microsoft SDKs\Azure.NET SDK\v2.8\schemas), the AllowAllTraffic element must precede the WhenSource element.

How to call Wso2bps using wso2esb

I am using wso2esb4.8.0 and wso2bps3.0.1 while i am working with 2 servers both are working fine .But i wish incorporate both severs for that i written sample BPEL
sample BPLE file is like this
<bpel:process name="multiply2integers"
targetNamespace="http://wso2.org/bps/sample"
suppressJoinFailure="yes"
xmlns:tns="http://wso2.org/bps/sample"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
>
<!-- Import the client WSDL -->
<bpel:import location="multiply2integersArtifacts.wsdl" namespace="http://wso2.org/bps/sample"
importType="http://schemas.xmlsoap.org/wsdl/" />
<!-- ================================================================= -->
<!-- PARTNERLINKS -->
<!-- List of services participating in this BPEL process -->
<!-- ================================================================= -->
<bpel:partnerLinks>
<!-- The 'client' role represents the requester of this service. -->
<bpel:partnerLink name="client"
partnerLinkType="tns:multiply2integers"
myRole="multiply2integersProvider"
/>
</bpel:partnerLinks>
<!-- ================================================================= -->
<!-- VARIABLES -->
<!-- List of messages and XML documents used within this BPEL process -->
<!-- ================================================================= -->
<bpel:variables>
<!-- Reference to the message passed as input during initiation -->
<bpel:variable name="input"
messageType="tns:multiply2integersRequestMessage"/>
<!--
Reference to the message that will be returned to the requester
-->
<bpel:variable name="output"
messageType="tns:multiply2integersResponseMessage"/>
</bpel:variables>
<!-- ================================================================= -->
<!-- ORCHESTRATION LOGIC -->
<!-- Set of activities coordinating the flow of messages across the -->
<!-- services integrated within this business process -->
<!-- ================================================================= -->
<bpel:sequence name="main">
<!-- Receive input from requester.
Note: This maps to operation defined in multiply2integers.wsdl
-->
<bpel:receive name="start" partnerLink="client"
portType="tns:multiply2integers"
operation="process" variable="input"
createInstance="yes"/>
<!-- Generate reply to synchronous request -->
<bpel:assign validate="no" name="Assign">
<bpel:copy>
<bpel:from>
<bpel:literal>
<tns:multiply2integersResponse xmlns:tns="http://wso2.org/bps/sample" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><tns:mul>0</tns:mul>
</tns:multiply2integersResponse>
</bpel:literal>
</bpel:from>
<bpel:to variable="output" part="payload"></bpel:to>
</bpel:copy>
<bpel:copy>
<bpel:from>
<![CDATA[$input.payload/tns:c*$input.payload/tns:d]]>
</bpel:from>
<bpel:to part="payload" variable="output">
<bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:mul]]></bpel:query>
</bpel:to>
</bpel:copy>
</bpel:assign>
<bpel:reply name="end"
partnerLink="client"
portType="tns:multiply2integers"
operation="process"
variable="output"
/>
</bpel:sequence>
</bpel:process>
even i am publishing my bpel wsdl also
if i try with wso2bps TRYIT tool its working fine but while calling with wso2esb is not working
WSDL file is
<?xml version="1.0"?>
<definitions name="multiply2integers"
targetNamespace="http://wso2.org/bps/sample"
xmlns:tns="http://wso2.org/bps/sample"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TYPE DEFINITION - List of types participating in this BPEL process
The BPEL Designer will generate default request and response types
but you can define or import any XML Schema type and use them as part
of the message types.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<types>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://wso2.org/bps/sample"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="multiply2integersRequest">
<complexType>
<sequence>
<element name="c" type="int"/>
<element name="d" type="int"/>
</sequence>
</complexType>
</element>
<element name="multiply2integersResponse">
<complexType>
<sequence>
<element name="mul" type="int"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MESSAGE TYPE DEFINITION - Definition of the message types used as
part of the port type defintions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<message name="multiply2integersRequestMessage">
<part name="payload" element="tns:multiply2integersRequest"/>
</message>
<message name="multiply2integersResponseMessage">
<part name="payload" element="tns:multiply2integersResponse"/>
</message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PORT TYPE DEFINITION - A port type groups a set of operations into
a logical service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- portType implemented by the multiply2integers BPEL process -->
<portType name="multiply2integers">
<operation name="process">
<input message="tns:multiply2integersRequestMessage" />
<output message="tns:multiply2integersResponseMessage"/>
</operation>
</portType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PARTNER LINK TYPE DEFINITION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<plnk:partnerLinkType name="multiply2integers">
<plnk:role name="multiply2integersProvider" portType="tns:multiply2integers"/>
</plnk:partnerLinkType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BINDING DEFINITION - Defines the message format and protocol details
for a web service.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<binding name="multiply2integersBinding" type="tns:multiply2integers">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="process">
<soap:operation
soapAction="http://wso2.org/bps/sample/process" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SERVICE DEFINITION - A service groups a set of ports into
a service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<service name="multiply2integers">
<port name="multiply2integersPort" binding="tns:multiply2integersBinding">
<soap:address location="http://*********:8080/multiply2integers" />
</port>
</service>
</definitions>
and i written sample proxy which will call the BPEL endpoint that sample proxy define below
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="BPELProxy"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="value1"
expression="//c/text()"
scope="default"
type="STRING"/>
<property name="value2"
expression="//d/text()"
scope="default"
type="STRING"/>
<payloadFactory media-type="xml">
<format>
<p:AddingPLRequest xmlns:p="http://wso2.org/bps/sample">
<c xmlns="http://wso2.org/bps/sample">$1</c>
<d xmlns="http://wso2.org/bps/sample">$2</d>
</p:AddingPLRequest>
</format>
<args>
<arg evaluator="xml" expression="get-property('c')"/>
<arg evaluator="xml" expression="get-property('d')"/>
</args>
</payloadFactory>
<log level="full"/>
<send>
<endpoint key="BPEL"/>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<description/>
</proxy>
defined endpoint view is my endpoint is
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="BPEL">
<address uri="http://*************:9763/services/multiply2integers/" format="soap12">
<suspendOnFailure>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>0</retryDelay>
</markForSuspension>
</address>
</endpoint>
i am sending request from CURL command to ESB I am getting errors my CURL Command is.
curl -v -H "Accept: application/json" -H "Content-Type:application/json" -d '{"c":"55","d":"3"}' http://***t:8282/services/BPELProxy
and its showing errors if i change the format of endpoint its showing some other error error log like this
[2014-01-13 15:20:01,070] INFO {org.wso2.carbon.core.services.util.CarbonAuthenticationUtil} - 'admin#carbon.super [-1234]' logged in at [2014-01-13 15:20:01,070+0530]
[2014-01-13 15:22:44,887] WARN {org.wso2.carbon.server.admin.module.handler.AuthenticationHandler} - Illegal access attempt at [2014-01-13 15:22:44,0886] from IP address null while trying to authenticate access to service StatisticsAdmin
[2014-01-13 15:22:44,887] ERROR {org.wso2.carbon.statistics.ui.StatisticsAdminClient} - Cannot get service stats for service multiply2integers. Backend server may be unavailable.
org.apache.axis2.AxisFault: The input stream for an incoming message is null.

Apache CXF WSDLToJava Error: operation already exists. How to bypass?

I am developing second client application that is consuming existing SOAP web-services.
I generate Java from existing WSDL using the latest Apache CXF 2.3 tool
wsdl2java -client -ant http://172.20.0.22/someletters/TradingServer.asmx?WSDL
and get
WSDLToJava Error: java.lang.IllegalArgumentException: An operation with name [{urn:someschema:TradingServer}GetTradeSummary] already exists in this service
that has logic, because when looking at WSDL file you can see 2 similar operation GetTradeSummary, but with different soapAction.
<wsdl:operation name="GetTradeSummary">
<soap:operation soapAction="urn:someschema/GetTradeSummary" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTradeSummary">
<soap:operation soapAction="urn:someschema/GetTradeSummary_Open" style="document" />
<wsdl:input name="GetTradeSummary_Open">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="GetTradeSummary_Open">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
a) Is it really regarded as erroneous by some standard? Which one?
b) Is there way to bypass this and generate Java scaffolding for the rest?
There's nothing such mentioned at CXF WSDL to Java tool web page, except -autoNameResolution which does not help.
This is specifically disallowed by the WSI-Basic Profile. If you look at:
http://www.ws-i.org/profiles/basicprofile-1.1.html
Section 4.5.3, it specifically states:
Operation name overloading in a wsdl:portType is disallowed by the Profile.
I don't think there is a way around it in CXF as the operations are stored in a Map keyed on QName. Since the QNames would not be unique, only one operation can be stored in the map.

Resources