0

SOAP を介して Web サービスとの間で Java オブジェクトを送受信すると、データが失われるという問題があります。「会社」と呼ばれる別のクラスのデータメンバーを持つ「ユーザー」と呼ばれるクラスがあります。どちらも、XML をバインドするための Java アノテーションを使用して複雑な型として SOAP に定義されます。何らかの理由で、Web サービスとの間で User オブジェクトを送信しようとすると、会社のメンバーのデータが失われ、メンバーが null 値として表示されます。NetBeans デバッガーを使用して、企業オブジェクトが送信前に取り込まれていることを確認し、NetBeans WS テスターを使用して、SOAP がオブジェクトを適切にフォーマットしていることを確認しました。したがって、Java の XML/SOAP から Java への変換に問題があるようです。

SOAP 応答は次のとおりです。

Method returned

com.lingosys.attask.ws.User : "com.lingosys.attask.ws.User@6f863b" SOAP リクエスト

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org

/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Header/>
        <S:Body>
            <ns2:getUser xmlns:ns2="http://ws.attask.lingosys.com/" xmlns:ns3="http://ws.fault.lingosys.com">
                <UserID>85967</UserID>
            </ns2:getUser>
        </S:Body>
    </S:Envelope>

SOAP Response

    <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Header/>
        <S:Body>
            <ns2:getUserResponse xmlns:ns2="http://ws.attask.lingosys.com/" xmlns:ns3="http://ws.fault.lingosys.com">
                <return>
                    <id>85967</id>
                    <name>Mohamed Abdullahi, Ph.D.</name>
                    <address>P.O. Box 56046</address>
                    <address2>407 Laurier Ave. W.</address2>
                    <adminNotes/>
                    <agreements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
                    <altPhone1/>
                    <altPhone2/>
                    <certifications/>
                    <city>Ottawa</city>
                    <company>
                        <id>7029</id>
                        <name>Mohamed Abdullahi, Ph.D.</name>
                        <addPMSurchargeforDocTrans>true</addPMSurchargeforDocTrans>
                        <checkKnowledgeMgt>false</checkKnowledgeMgt>
                        <clientID>0</clientID>
                        <docTransPricingScheme>LLS Pricing</docTransPricingScheme>
                        <greatPlainsID/>
                        <guid>c71d4c279af611e287980019d15adc73</guid>
                        <legalEntity>Lingo Systems</legalEntity>
                        <passTradosLeveraging>false</passTradosLeveraging>
                        <paymentTerms>0</paymentTerms>
                        <usLinguistsRequired>false</usLinguistsRequired>
                        <userDataID/>
                    </company>
                    <copyedit>0.0</copyedit>
                    <country/>
                    <email>annie@goodie.com</email>
                    <email2>mdiriye@hotmail.com</email2>
                    <fax/>
                    <firstName>Mohamed</firstName>
                    <helpFuzzy>0.0</helpFuzzy>
                    <helpNew>0.0</helpNew>
                    <helpReps>0.0</helpReps>
                    <hourly>0.0</hourly>
                    <lastName>Abdullahi, Ph.D.</lastName>
                    <lingoNetUser>false</lingoNetUser>
                    <linguistSource>Coto DB</linguistSource>
                    <llsClientID/>
                    <medicalFuzzy>0.0</medicalFuzzy>
                    <medicalNew>0.0</medicalNew>
                    <medicalReps>0.0</medicalReps>
                    <memberships xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
                    <min>0.0</min>
                    <mktFuzzy>0.0</mktFuzzy>
                    <mktNew>0.0</mktNew>
                    <mktReps>0.0</mktReps>
                    <os/>
                    <pager/>
                    <phone/>
                    <pmComments/>
                    <postalCode>KIR 7Z0</postalCode>
                    <qualified xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
                    <roles>Linguist Account</roles>
                    <rushFuzzy>0.0</rushFuzzy>
                    <rushNew>0.0</rushNew>
                    <rushReps>0.0</rushReps>
                    <sourceLanguage>English (US)</sourceLanguage>
                    <specialties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
                    <state>ON</state>
                    <targetLanguage/>
                    <taxID/>
                    <techFuzzy>0.0</techFuzzy>
                    <techNew>0.0</techNew>
                    <techReps>0.0</techReps>
                    <timeZone>US/Eastern</timeZone>
                    <title/>
                    <tools xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
                    <trFuzzy>0.0</trFuzzy>
                    <trNew>0.0</trNew>
                    <trReps>0.0</trReps>
                    <translatorSince/>
                    <trceFuzzy>0.0</trceFuzzy>
                    <trceNew>0.0</trceNew>
                    <trceReps>0.0</trceReps>
                    <uiFuzzy>0.0</uiFuzzy>
                    <uiNew>0.0</uiNew>
                    <uiReps>0.0</uiReps>
                    <userName>mdiriye@hotmail.com</userName>
                </return>
            </ns2:getUserResponse>
        </S:Body>
    </S:Envelope>

このサイトの投稿に含めることができるよりも多くのコードと共に、この問題を Java Ranch に投稿しました: http://www.coderanch.com/t/622496/Web-Services/java/losing-data-SOAP-Web-Service #2845835

あなたが見たいかもしれないsoemコードまたは文書があるかどうか私に知らせてください. 面白いことに、これらの Web サービスは非常によく似たバージョンであり、クライアントは別の環境で動作していました。フォーム NB6.9 Glassfish v2、JDK 1.6 から NB7.3.1、GF4、JDK 1.7 にアップグレード中です。Company クラスと User クラスにいくつかのコード変更が加えられましたが、SOAP と関係があると思われるものは何もありません。

どんな助けでも感謝します

4

2 に答える 2

0

わかりました、私はついに何が起こっているのかを理解し、共有したいと思いました. どうやら、バグが JAX-WS またはいくつかの関連ソフトウェアに忍び込み、属性の名前がそのクラスの名前と同じである場合、たとえ属性が小文字で始まっていても、Java の変換に問題が発生するようです。クラス名は大文字で始まります。User クラス属性の Company オブジェクトとそれに関連するゲッターとセッターを「company」から「userCompany」に変更すると、問題はなくなりました。このバグは、JDK 1.6 の後期に忍び込んだようです。JDK 1.6.0_7、NB 6.9、Glassfish V.2 の古い環境では問題ありませんでした。ただし、新しい NB 7.3.1 および GF4 では、NetBeans のデフォルト Java プラットフォーム用に JDK を 1.6.0_45 に設定しても問題が発生しました。

于 2013-11-06T06:59:36.137 に答える