1

cxf を使用して Java SOAP クライアントを開発しました。このアプリケーションは、付属のjdk v6で実行するMacで正常に動作します。私が作成するサービスは、たとえばイメージを magento インストールにアップロードしますが、ここで問題を紹介します。

Apache Cxf では、「不自由な」xml リクエストを避けるために、チャンキングをオフにしました。オープンjdkが原因で、このクライアントアプリがubuntuなどのLinuxディストリビューションで実行されないことを経験しました。openjdk 7 と oracle jdk 7 をインストールして Mac でこれをテストしたところ、同じエラーが表示されました。

それでも、クライアントからのリクエストがどこかでスライスされるため、アップロードは失敗します。

これはopenjdkといくつかのxml-libsの問題である可能性があると読みましたが、このトピックに関する本当に正確な情報や役立つ情報さえ見つかりません.

多分あなたの誰かが私を助けるかもしれません。

前もって感謝します。

これはリクエストとレスポンスです:

ID: 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
- インバウンドメッセージ
----------------------------
ID: 5
応答コード: 200
エンコーディング: UTF-8
コンテンツ タイプ: テキスト/xml; 文字セット=UTF-8
ヘッダー: {Cache-Control=[max-age=31536000]、connection=[close]、
コンテンツの長さ = [275]、コンテンツの種類 = [テキスト/xml; 文字セット=UTF-8]、
Date=[Fri, 17 Aug 2012 12:52:16 GMT], Expires=[Sat, 17 Aug 2013
12:52:16 GMT]、Server=[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の FAQ を調べた後。

OS X の最新の jdk 6 と新しい openjdk7 および oracle jdk7 を使用して統合テストを実行しました。

于 2012-08-18T08:08:40.327 に答える