我正在写一个SOAP Web服务的客户端.
我正在使用图书馆CXF.
与简单的前端.
和神盾数据绑定.
服务器正在为Web方法提供Java接口(名为MediaService),并在客户端项目中导入该接口.
然后我使用一个MediaService.aegis.xml文件来提供方法参数的名称(对于它们不被命名和序列化请求).
这是我在客户端上使用的代码:
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setDataBinding(new AegisDatabinding());
factory.setServiceClass(MediaService.class);
factory.setAddress(urlMediaServer);
MediaService service = (MediaService) factory.create();
final List listeReferences = service.sendMedia(bu, media);
服务界面如下所示:
public interface MediaService
{
public List sendMedia(String bu, Media media) throws Exception;
}
我启用了XML流日志记录,以便我看到发送到服务器的XML流,以及返回的流.
以下是流:
请求:
sc_phx
TEST_CODE
test.png
响应:
standard
photo
standard
photo
该服务被调用,它回复并且客户端收到正确的回复.
但是在客户端中,使Web Service调用的service.sendMedia(bu,media)行返回null.
反驳回复是有问题的.
你有什么想法,怎么解决?
最好的祝福.
更新:
我忘了提到这个方法:
MediaService service = (MediaService) factory.create();
我得到这个错误:
INFO: Creating Service {http://service.soclemedia.mycompany.com/}MediaService from class com.mycompany.soclemedia.service.MediaService
24 nov. 2011 15:18:37 org.apache.cxf.aegis.type.XMLTypeCreator
INFO: Could not set aegis schema. Not validating.
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
at javax.xml.parsers.DocumentBuilderFactory.setSchema(DocumentBuilderFactory.java:489)
at org.apache.cxf.aegis.type.XMLTypeCreator.(XMLTypeCreator.java:125)
at org.apache.cxf.aegis.AegisContext.createRootTypeCreator(AegisContext.java:122)
at org.apache.cxf.aegis.AegisContext.createTypeCreator(AegisContext.java:111)
at org.apache.cxf.aegis.AegisContext.initialize(AegisContext.java:153)
at org.apache.cxf.aegis.databinding.AegisDatabinding.initialize(AegisDatabinding.java:229)
at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:438)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:501)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:241)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:153)
...
这是我的cxf.xml:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
更新2:
这里是我的MediaService.aegis.xml: