Thank you for your very fast reply :)

When I used SoapUI to test the service while its deployed, (Instead of the
generated client\server classes), everything worked as expected. The
generated classes must have needed extra tuning from me, I think !

Thanks a lot for that great link !

-

On Sat, Mar 16, 2013 at 3:41 AM, Glen Mazza <[email protected]> wrote:

> Links #2 (preferably) or #3 should take care of you here:
> http://www.jroller.com/gmazza/**entry/blog_article_index<http://www.jroller.com/gmazza/entry/blog_article_index>,
>  link #55 for the SOAP 1.1/1.2 issue.  Link #2 serves equally well as a
> Maven tutorial.
>
> Glen
>
>
> On 03/15/2013 09:17 PM, Muhammad Gelbana wrote:
>
>> My first question here :)
>>
>> So I'm assigned a web-service based task but unfortunately I don't know
>> almost anything about web services ! After some searching I decided to use
>> Apache CXF but I'm facing some trouble.
>>
>> I do not need an interface so I only wrote a simple implemented class just
>> to get things started
>> ------------------------------**------------------------------**
>> ------------------------------**------------------------------**----
>> package com.sc.ipk.ws.services;
>>
>> import javax.annotation.**PostConstruct;
>> import javax.annotation.PreDestroy;
>> import javax.jws.WebMethod;
>> import javax.jws.WebService;
>> import javax.xml.ws.BindingType;
>> import javax.xml.ws.soap.SOAPBinding;
>>
>> @WebService(serviceName = "calcServiceName", portName = "calcPortName")
>> @BindingType(SOAPBinding.**SOAP12HTTP_BINDING)
>> public class Calculator {
>>      /**
>>       * @param firstOperand
>>       * @param secondOperand
>>       * @return The sum
>>       * @throws AddNumbersException
>>       *         if any of the numbers to be added is negative.
>>       */
>>      @WebMethod
>>      public int addition(@WebParam(name = "firstOperand") int int1,
>> @WebParam(name = "secondOperand") int int2) {
>>          return int1 + int2;
>>      }
>>
>>      @PostConstruct
>>      @WebMethod(exclude = true)
>>      public void willResponse() {
>>          System.out.println(">>>>>>>>>>**>>>>>>>>>>>>>>>>>>> Will
>> response");
>>      }
>>
>>      @PreDestroy
>>      @WebMethod(exclude = true)
>>      public void doneResponding() {
>>          System.out.println(">>>>>>>>>>**>>>>>>>>>>>>>>>>>>> Responded");
>>      }
>> }
>> ------------------------------**------------------------------**
>> ------------------------------**------------------------------**----
>> This is my ant java task to produce client, server and wsdl files:
>> ------------------------------**------------------------------**
>> ------------------------------**------------------------------**----
>> <java classname="org.apache.cxf.**tools.java2ws.JavaToWS" fork="true">
>> <arg value="-soap12" />
>> <arg value="-wsdl" />
>> <arg value="-server" />
>> <arg value="-client" />
>> <arg value="-verbose" />
>> <arg value="-o" />
>> <arg value="IpkWS.wsdl" />
>> <arg value="-databinding" />
>> <arg value="aegis" />
>> <arg value="-portname" />
>> <arg value="IxAccess" />
>> <arg value="-address" />
>> <arg value="http://localhost:8080/**ipk-ws <http://localhost:8080/ipk-ws>"
>> />
>> <arg value="-servicename" />
>> <arg value="IpkWS" />
>> <arg value="-frontend" />
>> <arg value="jaxws" />
>> <!--
>> <arg value="-s" />
>> <arg value="src" />
>> -->
>> <arg value="-d" />
>> <arg value="webapp/WEB-INF/wsdl" />
>> <arg value="com.sc.ipk.ws.services.**Calculator" />
>> <classpath>
>> <path refid="cxf.classpath" />
>> </classpath>
>> </java>
>> ------------------------------**------------------------------**
>> ------------------------------**------------------------------**----
>> I use ant because It's much easier for, I'm *terrible* with maven.
>>
>>
>> Here is what I need to do:
>> - I need to publish this service so a *.net* client is able to consume it,
>> that's why I need to use aegis. Unfortunately the *.net* client isn't
>>
>> accessible now for raid testing but I guess the generated java client code
>> should get me half way through
>>
>> Now I'm facing the following issues:
>> - @WebParam isn't effective, when I use it, i get parsing errors that the
>> expected elements are "firstOperand" and "secondOperand", this is the
>> error
>> stack:
>>
>> Exception in thread "main" javax.xml.ws.soap.**SOAPFaultException:
>> Unmarshalling Error: unexpected element (uri:"", local:"arg0"). Expected
>> elements are <{}secondOperand>,<{}**firstOperand>
>> at org.apache.cxf.jaxws.**JaxWsClientProxy.invoke(**
>> JaxWsClientProxy.java:155)
>> at $Proxy38.addition(Unknown Source)
>> at
>> com.sc.ipk.ws.services.**Calculator_PortTypeClient.**main(Calculator_**
>> PortTypeClient.java:20)
>> Caused by: org.apache.cxf.binding.soap.**SoapFault: Unmarshalling Error:
>> unexpected element (uri:"", local:"arg0"). Expected elements are
>> <{}secondOperand>,<{}**firstOperand>
>> at
>> org.apache.cxf.binding.soap.**interceptor.**Soap12FaultInInterceptor.**
>> unmarshalFault(**Soap12FaultInInterceptor.java:**133)
>> at
>> org.apache.cxf.binding.soap.**interceptor.**Soap12FaultInInterceptor.**
>> handleMessage(**Soap12FaultInInterceptor.java:**59)
>> at
>> org.apache.cxf.binding.soap.**interceptor.**Soap12FaultInInterceptor.**
>> handleMessage(**Soap12FaultInInterceptor.java:**46)
>> at
>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>> PhaseInterceptorChain.java:**271)
>> at
>> org.apache.cxf.interceptor.**AbstractFaultChainInitiatorObs**
>> erver.onMessage(**AbstractFaultChainInitiatorObs**erver.java:114)
>> at
>> org.apache.cxf.binding.soap.**interceptor.**CheckFaultInterceptor.**
>> handleMessage(**CheckFaultInterceptor.java:69)
>> at
>> org.apache.cxf.binding.soap.**interceptor.**CheckFaultInterceptor.**
>> handleMessage(**CheckFaultInterceptor.java:34)
>> at
>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>> PhaseInterceptorChain.java:**271)
>> at org.apache.cxf.endpoint.**ClientImpl.onMessage(**ClientImpl.java:800)
>> at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.**
>> handleResponseInternal(**HTTPConduit.java:1592)
>> at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.**
>> handleResponse(HTTPConduit.**java:1490)
>> at
>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.close(*
>> *HTTPConduit.java:1309)
>> at org.apache.cxf.transport.**AbstractConduit.close(**
>> AbstractConduit.java:56)
>> at org.apache.cxf.transport.http.**HTTPConduit.close(HTTPConduit.**
>> java:622)
>> at
>> org.apache.cxf.interceptor.**MessageSenderInterceptor$**
>> MessageSenderEndingInterceptor**.handleMessage(**
>> MessageSenderInterceptor.java:**62)
>> at
>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>> PhaseInterceptorChain.java:**271)
>> at org.apache.cxf.endpoint.**ClientImpl.doInvoke(**ClientImpl.java:530)
>> at org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:463)
>> at org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:366)
>> at org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:319)
>> at org.apache.cxf.frontend.**ClientProxy.invokeSync(**
>> ClientProxy.java:96)
>> at org.apache.cxf.jaxws.**JaxWsClientProxy.invoke(**
>> JaxWsClientProxy.java:133)
>> ... 2 more
>>
>> This is the WSDL file:
>>
>> <wsdl:definitions 
>> xmlns:xsd="http://www.w3.org/**2001/XMLSchema<http://www.w3.org/2001/XMLSchema>"
>> xmlns:wsdl="
>> http://schemas.xmlsoap.org/**wsdl/ <http://schemas.xmlsoap.org/wsdl/>"
>> xmlns:tns="http://services.ws.**ipk.sc.com/<http://services.ws.ipk.sc.com/>
>> "
>> xmlns:soap12="http://schemas.**xmlsoap.org/wsdl/soap12/<http://schemas.xmlsoap.org/wsdl/soap12/>"
>> xmlns:ns1="
>> http://schemas.xmlsoap.org/**soap/http<http://schemas.xmlsoap.org/soap/http>"
>> name="calcServiceName"**targetNamespace
>> ="http://services.ws.ipk.sc.**com/ <http://services.ws.ipk.sc.com/>">
>> <wsdl:types>
>> <xs:schema 
>> xmlns:xs="http://www.w3.org/**2001/XMLSchema<http://www.w3.org/2001/XMLSchema>"
>> xmlns:tns="
>> http://services.ws.ipk.sc.com/**"; elementFormDefault="**unqualified"
>> targetNamespace="http://**services.ws.ipk.sc.com/<http://services.ws.ipk.sc.com/>"
>> version="1.0">
>> <xs:element name="addition" type="tns:addition"/>
>> <xs:element name="additionResponse" type="tns:additionResponse"/>
>> <xs:complexType name="addition">
>> <xs:sequence>
>> *<xs:element name="firstOperand" type="xs:int"/>*
>> *<xs:element name="secondOperand" type="xs:int"/>*
>>
>> </xs:sequence>
>> </xs:complexType>
>> <xs:complexType name="additionResponse">
>> <xs:sequence>
>> <xs:element name="return" type="xs:int"/>
>> </xs:sequence>
>> </xs:complexType>
>> </xs:schema>
>> </wsdl:types>
>> <wsdl:message name="additionResponse">
>> <wsdl:part element="tns:additionResponse" name="parameters"></wsdl:part>
>> </wsdl:message>
>> <wsdl:message name="addition">
>> <wsdl:part element="tns:addition" name="parameters"></wsdl:part>
>> </wsdl:message>
>> <wsdl:portType name="Calculator">
>> <wsdl:operation name="addition">
>> <wsdl:input message="tns:addition" name="addition"></wsdl:input>
>> <wsdl:output message="tns:additionResponse" name="additionResponse">
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:portType>
>> <wsdl:binding name="**calcServiceNameSoapBinding" type="tns:Calculator">
>> <soap12:binding style="document" transport="
>> http://schemas.xmlsoap.org/**soap/http<http://schemas.xmlsoap.org/soap/http>
>> "/>
>> <wsdl:operation name="addition">
>> <soap12:operation soapAction="" style="document"/>
>> <wsdl:input name="addition">
>> <soap12:body use="literal"/>
>> </wsdl:input>
>> <wsdl:output name="additionResponse">
>> <soap12:body use="literal"/>
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:binding>
>> <wsdl:service name="calcServiceName">
>> <wsdl:port binding="tns:**calcServiceNameSoapBinding"
>> name="calcPortName">
>> <soap12:address 
>> location="http://localhost:**8080/ipk-ws/services/calc<http://localhost:8080/ipk-ws/services/calc>
>> "/>
>> </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>>
>> - After succeeding with that, I need to package my service as a *war* file
>>
>> and deploy it into tomcat 7 and expose a servlet context parameter from
>> another web app on the same servlet container of course, so how can that
>> be
>> done !
>>
>> - Another issue is that the generated client code is generated as if the
>> soap binding is *1.1* while I declared explicitly in the service
>> implementation class that the soap binding should be *1.2*
>>
>> QName serviceName = new 
>> QName("http://services.ws.ipk.**sc.com/<http://services.ws.ipk.sc.com/>",
>> "IpkWS");
>> QName portName = new 
>> QName("http://services.ws.ipk.**sc.com/<http://services.ws.ipk.sc.com/>",
>> "IxAccess");
>> Service service = Service.create(serviceName);
>> service.addPort(portName, *SOAPBinding.SOAP11HTTP_**BINDING*, "
>>
>> http://localhost:8080/ipk-ws";)**;
>> com.sc.ipk.ws.services.**Calculator_PortType client =
>> service.getPort(portName, com.sc.ipk.ws.services.**
>> Calculator_PortType.class);
>>
>> I'm using Apache CXF v2.7.3 and I included these jars in my classpath:
>> commons-logging-1.1.1.jar
>> httpasyncclient-4.0-beta3.jar
>> httpclient-4.2.1.jar
>> httpcore-4.2.2.jar
>> httpcore-nio-4.2.2.jar
>> isorelax-20030108.jar
>> msv-core-2011.1.jar
>> neethi-3.0.2.jar
>> relaxngDatatype-20020414.jar
>> spring-aop-3.0.7.RELEASE.jar
>> spring-asm-3.0.7.RELEASE.jar
>> spring-beans-3.0.7.RELEASE.jar
>> spring-context-3.0.7.RELEASE.**jar
>> spring-core-3.0.7.RELEASE.jar
>> spring-expression-3.0.7.**RELEASE.jar
>> spring-web-3.0.7.RELEASE.jar
>> wsdl4j-1.6.2.jar
>> xmlschema-core-2.0.3.jar
>> xsdlib-2010.1.jar
>>
>> Along with other JARS of course for other applications but these are
>> obviously the ones CXF needs, unless I messed something up !
>>
>> Please don't hesitate to reply if I failed to clarify anything and thank
>> you in advance for your time.
>>
>>
>

Reply via email to