Thanks for help Glen.
I am familiar with Maven and I will use Maven in future. The reason I used Ant
is because the tutorial I followed used Ant.
Thank you very much for detail clarification.
Charles
Date: Tue, 9 Oct 2012 08:41:06 -0700
From: [email protected]
To: [email protected]
Subject: Re: Newbie Simple Contract first webservice : new to CXF
cb9, we've moved to Maven for all of our CXF bundled examples and
recommend using that tool over Ant for web service providers and
clients. (The lone exception is our "antbuild" sample for those who
must work with that tool. If you want to work with Ant, I'd recommend
learning from that sample.) If you're not familiar with Maven, web
services are a easy and profitable way to become acquainted with this
very useful tool. In addition to my blog article below, the wsdl-first
sample in the CXF distribution also provides a Maven-based example.
Your change below just seems to be querying the WSDL, not making an
actual web service call.
I don't know if the generated Ant build scripts below were ever intended
to work out of the box for any given WSDL you supply it in the manner
you're expecting. More likely, they were intended to provide reasonably
useful scripts that would subsequently need modification. I'll test it
right now with my DoubleIt WSDL, but personally speaking I'd be more
inclined to remove the -ant functionality from our wsdl tools than fix
it, as we're now Maven-based and I don't see any community demand or
desire to continue to maintain Ant scripts outside of our antbuild sample.
Glen
On 10/09/2012 10:44 AM, Mark Streit wrote:
> You may want to take a look at Glen Mazza's website where he has a number
> of web service tutorials.
> http://www.jroller.com/gmazza/entry/blog_article_index
>
> In particular: http://www.jroller.com/gmazza/entry/web_service_tutorial
>
> Perhaps this would be helpful?
>
>
> On Tue, Oct 9, 2012 at 9:56 AM, cb9 <[hidden email]> wrote:
>
>> Hi,
>>
>> I am new to Apache CXF and this my first post here.
>>
>> I am trying to develop simple HelloWorld contract first webservice. I have
>> following wsdl which is simple.
>>
>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>> xmlns:tns="http://www.example.org/Hello/"
>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Hello"
>> targetNamespace="http://www.example.org/Hello/">
>> <wsdl:types>
>> <xsd:schema targetNamespace="http://www.example.org/Hello/">
>> <xsd:element name="sayHello">
>> <xsd:complexType>
>> <xsd:sequence>
>> <xsd:element name="in" type="xsd:string"/>
>> </xsd:sequence>
>> </xsd:complexType>
>> </xsd:element>
>> <xsd:element name="sayHelloResponse">
>> <xsd:complexType>
>> <xsd:sequence>
>> <xsd:element name="out" type="xsd:string"/>
>> </xsd:sequence>
>> </xsd:complexType>
>> </xsd:element>
>> </xsd:schema>
>> </wsdl:types>
>> <wsdl:message name="sayHelloRequest">
>> <wsdl:part element="tns:sayHello" name="parameters"/>
>> </wsdl:message>
>> <wsdl:message name="sayHelloResponse">
>> <wsdl:part element="tns:sayHelloResponse" name="parameters"/>
>> </wsdl:message>
>> <wsdl:portType name="Hello">
>> <wsdl:operation name="sayHello">
>> <wsdl:input message="tns:sayHelloRequest"/>
>> <wsdl:output message="tns:sayHelloResponse"/>
>> </wsdl:operation>
>> </wsdl:portType>
>> <wsdl:binding name="HelloSOAP" type="tns:Hello">
>> <soap:binding style="document"
>> transport="http://schemas.xmlsoap.org/soap/http"/>
>> <wsdl:operation name="sayHello">
>> <soap:operation soapAction="http://www.example.org/Hello/sayHello"/>
>> <wsdl:input>
>> <soap:body use="literal"/>
>> </wsdl:input>
>> <wsdl:output>
>> <soap:body use="literal"/>
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:binding>
>> <wsdl:service name="Hello">
>> <wsdl:port binding="tns:HelloSOAP" name="HelloSOAP">
>> <soap:address location="http://localhost:9002/Hello"/>
>> </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>>
>>
>> I generated java classes using following command
>>
>> wsdl2java -d src -ant -impl -server -client -all Hello.wsdl
>>
>>
>> Then I run server using -----------------------------------
>> ant HelloServer
>> Then I run client using -------------------------------------
>> and HelloClient
>>
>>
>> I get error
>>
>> Invoking sayHello...
>> [java] Oct 9, 2012 6:40:16 PM
>> org.apache.cxf.phase.PhaseInterceptorChain doIntercept
>> [java] WARNING: Interceptor has thrown exception, unwinding now
>> [java] org.apache.cxf.binding.soap.SoapFault: Error reading
>> XMLStreamReader.
>> [java] at
>>
>> org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:196)
>> [java] at
>>
>> org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:58)
>> [java] at
>>
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
>> [java] at
>> org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:658)
>> [java] at
>>
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2139)
>> [java] at
>>
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2022)
>> [java] at
>>
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1947)
>> [java] at
>> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
>> [java] at
>> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
>> [java] at
>>
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>> [java] at
>>
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
>> [java] at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:472)
>> [java] at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:302)
>> [java] at
>> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:254)
>> [java] at
>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
>> [java] at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:123)
>> [java] at $Proxy39.sayHello(Unknown Source)
>> [java] at
>>
>> org.example.hello.Hello_HelloSOAP_Client.main(Hello_HelloSOAP_Client.java:69)
>> [java] Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in
>> prolog
>> [java] at [row,col {unknown-source}]: [1,0]
>> [java] at
>> com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:686)
>> [java] at
>> com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2134)
>> [java] at
>>
>> com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2040)
>> [java] at
>> com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
>> [java] at
>> com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1095)
>> [java] at
>>
>> org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:93)
>> [java] ... 17 more
>> [java] Exception in thread "main"
>> javax.xml.ws.soap.SOAPFaultException:
>> Error reading XMLStreamReader
>>
>>
>>
>> I captured traffic on wireshark. Following I get on wireshark.
>>
>>
>> POST /Hello HTTP/1.1
>> Content-Type: text/xml; charset=UTF-8
>> SOAPAction: "http://www.example.org/Hello/sayHello"
>> Accept: */*
>> User-Agent: Apache CXF 2.2.3
>> Cache-Control: no-cache
>> Pragma: no-cache
>> Host: localhost:9002
>> Connection: keep-alive
>> Content-Length: 196
>>
>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>> <soap:Body>
>> <ns2:sayHello xmlns:ns2="http://www.example.org/Hello/">
>> <in>Charles</in>
>> </ns2:sayHello>
>> </soap:Body>
>> </soap:Envelope>
>>
>> HTTP/1.1 302 Found
>> Location: http://localhost:9002/Hello/
>> Content-Length: 0
>> Server: Jetty(6.1.19)
>>
>>
>> The generated Ant file is
>>
>>
>> <?xml version="1.0"?>
>>
>>
>> <project name="cxf wsdltojava" default="build" basedir=".">
>>
>> <property environment="env"/>
>> <property name="home.dir" location="${basedir}"/>
>> <property name="build.dir" location ="${basedir}/build"/>
>> <property name="build.classes.dir" location ="${build.dir}/classes"/>
>> <property name="build.src.dir" location ="${basedir}"/>
>>
>>
>> <available property="tools.jar" value="$${env.JAVA_HOME}/lib/tools.jar"
>> file="${env.JAVA_HOME}/lib/tools.jar"/>
>> <path id="jdk.tools.classpath">
>> <pathelement location="${tools.jar}"/>
>> </path>
>>
>> <condition property="is.java.version.15">
>> <or>
>> <equals arg1="${ant.java.version}" arg2="1.5"/>
>> <equals arg1="${ant.java.version}" arg2="1.6"/>
>> </or>
>> </condition>
>>
>> <fail message="cxf requires Java version 1.5 or higher. You are
>> currently using Java version ${ant.java.version}."
>> unless="is.java.version.15"/>
>>
>>
>> <condition property="cxf.home" value="${env.CXF_HOME}">
>> <isset property="env.CXF_HOME"/>
>> </condition>
>>
>> <fail message="Please set CXF_HOME environment variable."
>> unless="cxf.home"/>
>>
>>
>> <condition property="cxf-manifest.jar.file"
>> value="${cxf.home}/build/lib/cxf-manifest.jar">
>> <available file="cxf-manifest.jar" type="file"
>> filepath="${cxf.home}/build/lib"/>
>> </condition>
>> <property name="cxf-manifest.jar.file"
>> value="${cxf.home}/lib/cxf-manifest.jar"/>
>>
>> <fail message="The location ${cxf.home} does not seem to contain a cxf
>> installation; if you are importing this common build file from a location
>> other than the cxf samples directory then you need to set the cxf_HOME
>> environment variable.">
>> <condition>
>> <not>
>> <isset property="cxf-manifest.jar.file" />
>> </not>
>> </condition>
>> </fail>
>>
>>
>> <condition property="thirdparty.tools.dir" value="${cxf.home}/tools">
>> <available file="tools" type="dir" filepath="${cxf.home}"/>
>> </condition>
>>
>> <condition property="thirdparty.tools.dir" value="${cxf.home}/lib">
>> <available file="lib" type="dir" filepath="${cxf.home}"/>
>> </condition>
>>
>> <property name="cxf.etc.dir" location="${cxf.home}/etc"/>
>>
>> <path id="cxf.classpath">
>> <pathelement location="${home.dir}" />
>> <pathelement location="${build.classes.dir}"/>
>> <pathelement location="${cxf-manifest.jar.file}"/>
>> </path>
>>
>> <target name="HelloClient" description="Run
>> org.example.hello.Hello_HelloSOAP_Client" depends="compile">
>> <property name="param" value=""/>
>> <cxfrun classname="org.example.hello.Hello_HelloSOAP_Client"
>> param1="file:Hello.wsdl"
>> param2="${op}"
>> param3="${param}"/>
>> </target>
>>
>> <target name="HelloServer" description="Run
>> org.example.hello.Hello_HelloSOAP_Server" depends="compile">
>> <cxfrun classname="org.example.hello.Hello_HelloSOAP_Server"
>> param1="file:Hello.wsdl"/>
>> </target>
>>
>>
>>
>> <target name="compile">
>> <mkdir dir="${build.classes.dir}"/>
>> <javac srcdir="${build.src.dir}" destdir="${build.classes.dir}"
>> debug="true">
>> <classpath refid="cxf.classpath" />
>> </javac>
>> </target>
>>
>> <target name="checkstyle">
>> <checkstyle config="${checkstyle.config.file}">
>> <fileset dir="${basedir}/src" includes="**/*.java"/>
>> <classpath>
>> <path refid="cxf.classpath"/>
>> </classpath>
>> </checkstyle>
>> </target>
>>
>> <target name="clean">
>> <delete dir="${build.classes.dir}"/>
>> <delete file="${java.timestamp.file}"/>
>> <delete file="demo.log"/>
>> </target>
>>
>> <target name="build" depends="compile" description="build demo client
>> and server"/>
>>
>> <macrodef name="cxfrun">
>> <attribute name="classname"/>
>> <attribute name="param1" default=""/>
>> <attribute name="param2" default=""/>
>> <attribute name="param3" default=""/>
>> <attribute name="param4" default=""/>
>> <attribute name="param5" default=""/>
>> <attribute name="jvmarg1" default="-D"/>
>> <attribute name="jvmarg2" default="-D"/>
>> <attribute name="jvmarg3" default="-D"/>
>> <attribute name="jvmarg4" default="-D"/>
>> <attribute name="jvmarg5" default="-D"/>
>> <sequential>
>> <java classname="@{classname}" fork="yes">
>> <classpath>
>> <path refid="cxf.classpath"/>
>> </classpath>
>> <arg value="@{param1}"/>
>> <arg value="@{param2}"/>
>> <arg value="@{param3}"/>
>> <arg value="@{param4}"/>
>> <arg value="@{param5}"/>
>> <jvmarg value="@{jvmarg1}"/>
>> <jvmarg value="@{jvmarg2}"/>
>> <jvmarg value="@{jvmarg3}"/>
>> <jvmarg value="@{jvmarg4}"/>
>> <jvmarg value="@{jvmarg5}"/>
>> <assertions>
>> <enable package="org.apache.cxf"/>
>> </assertions>
>> <sysproperty key="java.util.logging.config.file"
>> value="${cxf.etc.dir}/logging.properties"/>
>> <sysproperty key="log4j.configuration"
>> value="file:///${cxf.etc.dir}/log4j.properties"/>
>> </java>
>> </sequential>
>> </macrodef>
>> </project>
>>
>>
>> Now I changed
>>
>> <target name="HelloClient" description="Run
>> org.example.hello.Hello_HelloSOAP_Client" depends="compile">
>> <property name="param" value=""/>
>> <cxfrun classname="org.example.hello.Hello_HelloSOAP_Client"
>> param1="file:Hello.wsdl"
>> param2="${op}"
>> param3="${param}"/>
>> </target>
>>
>>
>> <target name="HelloClient" description="Run
>> org.example.hello.Hello_HelloSOAP_Client" depends="compile">
>> <property name="param" value=""/>
>> <cxfrun classname="org.example.hello.Hello_HelloSOAP_Client"
>> param1="http://localhost:9002/Hello/?wsdl"
>> param2="${op}"
>> param3="${param}"/>
>> </target>
>>
>>
>> This works prefect.
>>
>> Now following traffic I get on wireshark
>>
>> GET /Hello/?wsdl HTTP/1.1
>> User-Agent: Java/1.6.0_35
>> Host: localhost:9002
>> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
>> Connection: keep-alive
>>
>> HTTP/1.1 200 OK
>> Content-Type: text/xml
>> Transfer-Encoding: chunked
>> Server: Jetty(6.1.19)
>>
>> 89D
>> <?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="Hello"
>> targetNamespace="http://www.example.org/Hello/"
>> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>> xmlns:tns="http://www.example.org/Hello/"
>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>> <wsdl:types>
>> <xsd:schema targetNamespace="http://www.example.org/Hello/"
>> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>> xmlns:tns="http://www.example.org/Hello/"
>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>> <xsd:element name="sayHello">
>> <xsd:complexType>
>> <xsd:sequence>
>> <xsd:element name="in" type="xsd:string" />
>> </xsd:sequence>
>> </xsd:complexType>
>> </xsd:element>
>> <xsd:element name="sayHelloResponse">
>> <xsd:complexType>
>> <xsd:sequence>
>> <xsd:element name="out" type="xsd:string" />
>> </xsd:sequence>
>> </xsd:complexType>
>> </xsd:element>
>> </xsd:schema>
>> </wsdl:types>
>> <wsdl:message name="sayHelloResponse">
>> <wsdl:part element="tns:sayHelloResponse" name="parameters">
>> </wsdl:part>
>> </wsdl:message>
>> <wsdl:message name="sayHelloRequest">
>> <wsdl:part element="tns:sayHello" name="parameters">
>> </wsdl:part>
>> </wsdl:message>
>> <wsdl:portType name="Hello">
>> <wsdl:operation name="sayHello">
>> <wsdl:input message="tns:sayHelloRequest">
>> </wsdl:input>
>> <wsdl:output message="tns:sayHelloResponse">
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:portType>
>> <wsdl:binding name="HelloSOAP" type="tns:Hello">
>> <soap:binding style="document"
>> transport="http://schemas.xmlsoap.org/soap/http" />
>> <wsdl:operation name="sayHello">
>> <soap:operation soapAction="http://www.example.org/Hello/sayHello"
>> />
>> <wsdl:input>
>> <soap:body use="literal" />
>> </wsdl:input>
>> <wsdl:output>
>> <soap:body use="literal" />
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:binding>
>> <wsdl:service name="Hello">
>> <wsdl:port binding="tns:HelloSOAP" name="HelloSOAP">
>> <soap:address location="http://localhost:9002/Hello/" />
>> </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>> 0
>>
>> POST /Hello/ HTTP/1.1
>> Content-Type: text/xml; charset=UTF-8
>> SOAPAction: "http://www.example.org/Hello/sayHello"
>> Accept: */*
>> User-Agent: Apache CXF 2.2.3
>> Cache-Control: no-cache
>> Pragma: no-cache
>> Host: localhost:9002
>> Connection: keep-alive
>> Content-Length: 196
>>
>> <soap:Envelope
>> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
>> "><soap:Body><ns2:sayHello
>> xmlns:ns2="http://www.example.org/Hello/
>> "><in>Charles</in></ns2:sayHello></soap:Body></soap:Envelope>HTTP/1.1
>> 200 OK
>> Content-Type: text/xml; charset=utf-8
>> Content-Length: 207
>> Server: Jetty(6.1.19)
>>
>> <soap:Envelope
>> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
>> "><soap:Body><ns2:sayHelloResponse
>> xmlns:ns2="http://www.example.org/Hello/
>> "><out></out></ns2:sayHelloResponse></soap:Body></soap:Envelope>
>>
>>
>> I don't know what is problem.
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://cxf.547215.n5.nabble.com/Newbie-Simple-Contract-first-webservice-new-to-CXF-tp5716164.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
>
>
> *
> *
>
--
Glen Mazza
Talend Community Coders - coders.talend.com
blog: www.jroller.com/gmazza
If you reply to this email, your message will be added to the
discussion below:
http://cxf.547215.n5.nabble.com/Newbie-Simple-Contract-first-webservice-new-to-CXF-tp5716164p5716175.html
To unsubscribe from Newbie Simple Contract first webservice :
new to CXF, click here.
NAML
--
View this message in context:
http://cxf.547215.n5.nabble.com/Newbie-Simple-Contract-first-webservice-new-to-CXF-tp5716164p5716182.html
Sent from the cxf-user mailing list archive at Nabble.com.