Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog

967 views
Skip to first unread message

shanghai2007

unread,
Oct 28, 2007, 6:42:17 AM10/28/07
to cxf-zh
大家好:我刚开始学CXF,碰到下面的问题:
package demo.spring;

import java.util.List;

import javax.jws.WebService;


@WebService
public interface HelloWorld {
String sayHi(String text);
public List<ResultModel> findMap(Model model)throws Exception;
}


package demo.spring;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;


@WebService(endpointInterface = "demo.spring.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

public String sayHi(String text) {
return "Hello " + text;
}
public List<ResultModel> findMap(Model model)throws Exception{
ResultModel result=new ResultModel();
result.setId(2L);
result.setParam("paramsyuw");
List<ResultModel> list=new ArrayList<ResultModel>();
list.add(result);
return list;
}
}

/////
package demo.spring;
import java.io.Serializable;
public class Model implements Serializable{

private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String location;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}

}

package demo.spring;
import java.io.Serializable;
public class ResultModel implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private String param;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}

}
beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /
>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<bean id="jaxWsServiceFactoryBean"

class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="wrapped" value="true" />
<property name="dataBinding" ref="aegisBean" />
</bean>

<bean id="aegisBean"
class="org.apache.cxf.aegis.databinding.AegisDatabinding" />

<jaxws:endpoint id="CollectiveServices"
implementor="demo.spring.HelloWorldImpl" address="/
HelloWorld">
<jaxws:serviceFactory>
<ref bean="jaxWsServiceFactoryBean"/>
</jaxws:serviceFactory>
</jaxws:endpoint>
</beans>

客户端代码:
ackage demo.spring.client;

import static org.junit.Assert.assertEquals;

import org.apache.cxf.aegis.databinding.AegisDatabinding;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import
org.springframework.context.support.ClassPathXmlApplicationContext;

import demo.spring.HelloWorld;;

public final class ClientTest {

private static ClassPathXmlApplicationContext context;

@BeforeClass
public static void beforeClass() {
context = new ClassPathXmlApplicationContext(
new String[] { "demo/spring/client/aa.xml"});
}

@AfterClass
public static void afterClass() {
context = null;
}

@Test
public void testSayHiWithSpringConfig() throws Exception {

HelloWorld client = (HelloWorld) context.getBean("client");

String response = client.sayHi("Joe");
assertEquals("Hello Joe", response);
}

/**
* ??? ?????? ?http://cwiki.apache.org/CXF20DOC/aegis-
databinding.html??
*
* @throws Exception
*/
@Test
public void testSayHiByCode() throws Exception {

ClientProxyFactoryBean factory = new
ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/testCxf/ws/
HelloWorld");
factory.getServiceFactory().setDataBinding(new
AegisDatabinding());
HelloWorld client = (HelloWorld) factory.create();

assertEquals("Hello Joe", client.sayHi("Joe"));
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">


<bean id="aegisBean"
class="org.apache.cxf.aegis.databinding.AegisDatabinding" />

<bean id="serviceFactoryBean"
class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="dataBinding" ref="aegisBean" />
</bean>

<bean id="client" class="demo.spring.HelloWorld"
factory-bean="clientFactory" factory-method="create" />

<bean id="clientFactory"
class="org.apache.cxf.frontend.ClientProxyFactoryBean">
<property name="serviceFactory" ref="serviceFactoryBean" />
<property name="serviceClass"
value="demo.spring.HelloWorld" />
<property name="address"
value="http://localhost:8080/cxf/ws/HelloWorld" />
</bean>

</beans>

WSDL文件可以出现,但运行JUNIT时报错:

shanghai2007

unread,
Oct 28, 2007, 6:43:42 AM10/28/07
to cxf-zh
报错信息:

log4j:WARN No appenders could be found for logger
(org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
2007-10-28 18:43:04
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromClass
信息: Creating Service {http://spring.demo/}HelloWorldService from class
demo.spring.HelloWorld
2007-10-28 18:43:05
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromClass
信息: Creating Service {http://spring.demo/}HelloWorld from class
demo.spring.HelloWorld
2007-10-28 18:43:06 org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
信息: Interceptor has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
187)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
56)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:395)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.handleResponse(HTTPConduit.java:1932)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.close(HTTPConduit.java:1790)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:
66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:
576)
at org.apache.cxf.interceptor.MessageSenderInterceptor
$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:
62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:254)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:205)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:
73)
at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)
at $Proxy14.sayHi(Unknown Source)
at demo.spring.client.ClientTest.testSayHiByCode(ClientTest.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
at
org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:
98)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:
79)
at
org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:
87)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:
77)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
at
org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:
88)
at
org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:
51)
at org.junit.internal.runners.JUnit4ClassRunner
$1.run(JUnit4ClassRunner.java:44)
at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:
26)
at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:
36)
at
org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:
42)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]
at
com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:
661)
at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:
2134)
at
com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:
2040)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:
1069)
at com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:
1095)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
85)
... 37 more

shanghai2007

unread,
Oct 28, 2007, 6:44:00 AM10/28/07
to cxf-zh

willem

unread,
Oct 28, 2007, 6:57:38 AM10/28/07
to cxf-zh
你的Server端使用的是JAXWS front end API, 而客户端却使用的是Simple front end API.
建议你读一下CXF wiki[1] 把客户端的代码改成用JaxWsProxyFactoryBean 试一下。

[1]http://cwiki.apache.org/CXF20DOC/index.html

姜宁 (Willem)
------------------
http://willem.bokeland.com/


On 10月28日, 下午6时42分, shanghai2007 <wangjinjie2...@126.com> wrote:

> xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd">

> xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schema/jaxws.xsd">

Reply all
Reply to author
Forward
0 new messages