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.

Reply via email to