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 <[email protected]> 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

Reply via email to