2012-12-17 81 views
2

我在與.NET Web服務進行通信的Java客戶端下構建的SOAP存在問題。 我也有一個用於測試目的的.NET客戶端,並且這個客戶端我沒有任何問題。由.NET客戶端構造的SOAP具有有效的對象,Java客戶端SOAP具有空對象

你能幫我找出可能是錯的嗎?

SOAP JAVA

<?xml version='1.0' encoding='UTF-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
<ns2:exportReferentiel xmlns:ns2="http://www.svad.actoll.com/Svad2BPass/V1.0"> 
<exportData> 
<produit idRechargement="202" libelle="Ticket 10 x 1h individuel" LibelleIhm="Ticket 10x1h ind" ordreTri="10" descriptionLongue="Ticket 10 x 1h individuel" dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00"> 
    <tarif libelle="202"> 
    <validiteTarif dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00" valeur="1070" /> 
    <validiteTarif dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00" valeur="1070" /> 
    </tarif> 
    </produit> 
... 

上述SOAP有一個空對象

.NET SOAP

<?xml version='1.0' encoding='UTF-8'?> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <exportReferentiel xmlns="http://www.svad.actoll.com/Svad2BPass/V1.0"> 
     <exportData> 
     <produit idRechargement="998" libelle="Teste" LibelleIhm="Teste" ordreTri="98" descriptionLongue="batatinhas" dateDebut="2010-05-10T00:00:00" dateFin="2012-12-31T00:00:00" xmlns=""> 
      <tarif libelle="998"> 
      <validiteTarif dateDebut="2010-05-10T00:00:00" dateFin="2012-12-31T00:00:00" valeur="300" /> 
      <validiteTarif dateDebut="2012-12-31T23:59:59.999" dateFin="2013-12-31T00:00:00" valeur="600" /> 
      </tarif> 
     </produit> 
... 

Web服務.NET

[WebService(Namespace = "http://www.svad.actoll.com/Svad2BPass/V1.0")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
public class Service : System.Web.Services.WebService, ISvad2BPass 
{ 
    private static bool Debug = false; 
[WebMethod] 
    [SoapDocumentMethod("http://www.svad.actoll.com/Svad2BPass/V1.0/exportReferentiel")] 
    public ExportPassTransBPassStatusType exportReferentiel(ExportPassTransBPassType exportData) 
    { 
     Debug = bool.Parse(ConfigurationManager.AppSettings["Debug"]); 

     Logger.Instance.Log(LogTypeCode.DEBUG, exportData.ToString()); 

     exportReferentielRequest req = new exportReferentielRequest(exportData); 
     return LoadExportPassTransBPass(req); 
    } 

的exportData與Java SOAP beco mes null,而使用.NET SOAP,它可以與所有數據一起...

任何人都可以幫助我解決這個問題嗎?

回答

0

我通過將ns2添加到exportData標記來解決此問題。 所以這SOAP的正確結構是:

<ns2:exportReferentiel xmlns:ns2="http://www.svad.actoll.com/Svad2BPass/V1.0"> 
<ns2:exportData> 
<produit idRechargement="202" libelle="Ticket 10 x 1h individuel" LibelleIhm="Ticket 10x1h ind" ordreTri="10" descriptionLongue="Ticket 10 x 1h individuel" dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00"> 
    <tarif libelle="202"> 
    <validiteTarif dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00" valeur="1070" /> 
    <validiteTarif dateDebut="1999-01-01T00:00:00.000+01:00" dateFin="2099-01-01T00:00:00.000+01:00" valeur="1070" /> 
    </tarif> 
</produit> 
... 
</ns2:exportData> 
... 
0

昨天我還在打類似的問題。最後發現合同接口中的參數名稱與客戶端傳遞的內容不匹配。然而,看看你的請求,我沒有看到Java客戶端和.net客戶端之間的任何名稱差異。

你的界面是什麼樣的?

+0

[System.CodeDom.Compiler.GeneratedCodeAttribute( 「System.ServiceModel」, 「4.0.0.0」)] [System.ServiceModel.ServiceContractAttribute(命名空間=「HTTP ://www.svad.actoll.com/Svad2BPass/V1.0「,ConfigurationName =」Svad2BPass「)] public interface ISvad2BPass {System.ServiceModel.OperationContractAttribute(Action =」http://www.svad。 actoll.com/Svad2BPass/V1.0/exportReferentiel「,ReplyAction =」*「)] [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ExportPassTransBPassStatusType exportReferentiel(ExportPassTransBPassType exportData); –

+0

你認爲這是一個接口問題嗎? –

+0

對我來說看起來沒問題。必須與參數名稱不匹配有所不同。害怕我沒有足夠的經驗去思考它會是什麼。 –