1

我使用 cxf 开发了一个 java soap 客户端。这个应用程序在我使用包含的 jdk v6 运行它的 mac 上运行良好。我创建的服务,例如将图像上传到 magento 安装,但在这里我将介绍问题。

在 Apache Cxf 中,我关闭了分块以避免“残缺”的 xml 请求。现在我体验到,由于开放的 jdk,我的客户端应用程序无法在 ubuntu 等 Linux 发行版上运行。我通过安装 openjdk 7 和 oracle jdk 7 在我的 mac 上对此进行了测试,并且出现了相同的错误。

尽管如此,我还是拒绝将来自客户端的请求分块,因此上传失败。

我读到这可能是 openjdk 和一些 xml-libs 的问题,但我找不到关于这个主题的任何真正精确甚至有用的信息。

也许你们中的某个人可以帮助我。

提前致谢。

这是请求和响应:

编号:5
地址:http://dev.magento.com/index.php/api/v2_soap/index/
编码:UTF-8
内容类型:文本/xml
标头:{Accept=[*/*],
SOAPAction=[""]}
消息:出站消息(保存到 tmp 文件):
文件名:
/var/folders/z6/91v2ntss00s1786v_1_5y2540000gn/T/cxf-tmp-636617/cos5007091721474555391tmp
(消息被截断为 102400 字节)

有效载荷:

    
        
            552f069112dde557bc577735fc4eb8bf
            5540
            
                
                    
                        /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQ
--------------------------------------
14168 [主要] 信息
org.apache.cxf.services.MagentoService.Mage_Api_Model_Server_Wsi_HandlerPort.Mage_Api_Model_Server_Wsi_HandlerPortType
- 入站消息
----------------------------
编号:5
响应码:200
编码:UTF-8
内容类型:文本/xml;字符集=UTF-8
标头:{Cache-Control=[max-age=31536000],connection=[close],
内容长度=[275],内容类型=[文本/xml;字符集=UTF-8],
日期=[格林威治标准时间 2012 年 8 月 17 日星期五 12:52:16],到期日=[2013 年 8 月 17 日星期六
12:52:16 GMT],服务器=[Apache],Vary=[Accept-Encoding]}
有效载荷:

    
        
            102
            Ungültiger Bildtyp。
        
    


--------------------------------------

这是一个跟踪:

javax.xml.ws.soap.SOAPFaultException:不支持的图像类型
    在 org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
    在 $Proxy28.catalogProductAttributeMediaCreate(未知来源)
    在 at.myproject.soap.service.product.media.ProductAttributeMediaServiceImpl.create(ProductAttributeMediaServiceImpl.java:61)
    在 at.myproject.magento.service.sync.product.ProductSyncServiceImpl.updateProduct(ProductSyncServiceImpl.java:275)
    在 at.myproject.magento.service.sync.product.ProductSyncServiceImpl.updateProducts(ProductSyncServiceImpl.java:185)
    在 at.myproject.magento.service.sync.product.ProductSyncServiceImpl.syncronize(ProductSyncServiceImpl.java:145)
    在 at.myproject.magento.scheduler.jobs.ProductSyncJob.execute(ProductSyncJob.java:21)
    在 org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    在 org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
引起:org.apache.cxf.binding.soap.SoapFault:Ungültiger Bildtyp。
    在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
    在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
    在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
    在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    在 org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
    在 org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
    在 org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
    在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    在 org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798)
    在 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1656)
    在 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1521)
    在 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1429)
    在 org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    在 org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:659)
    在 org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    在 org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:532)
    在 org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
    在 org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
    在 org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
    在 org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
    在 org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
    ... 8 更多
4

1 回答 1

1

我可以通过将这些库添加到我的 pom 来解决这个问题,

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.1</version>
    </dependency>

,在咨询了Apache 的 CXF的常见问题解答之后。

我使用 OS X 最新的 jdk 6 和新的 openjdk7 和 oracle jdk7 运行了我的集成测试。

于 2012-08-18T08:08:40.327 回答