2012-02-25 2 views
0

У меня есть приложение flex 4.6, вызывающее веб-службу, которая обращается к серверу MS SQl. Я использую (или пытаюсь использовать) созданный веб-сервис. веб-служба, похоже, работает с возвратом XML, но я получаю следующую ошибку.Ошибка анализатора XML: элемент имеет неправильный характер. null

"XML parser failure: element is malformed. null" 

Я нагуглить эту ошибку и сделал некоторые исследования и то, что я понимаю, что это причина по тому, как XML является формат приходит из веб-службы.

Я написал веб-службы в C# и я тестировал, Услуга перенастройки следующую структуру XML:

<root> 
<pub> 
<PublicationId>BIA-B0112</PublicationId> 
<TargetPPODate>2012-02-28</TargetPPODate> 
<TargetPPIDate>2012-03-13</TargetPPIDate> 
<TargetRIPDate>2012-03-16</TargetRIPDate> 
</pub> 
</root> 

формат не смотреть мне неправильным, вот мой C# код, который возвращает этот ,

// Connect to the database and run the query 
SqlConnection conn = new SqlConnection(bldr.ToString()); 
SqlCommand cmd = new SqlCommand("AWFE.dbo.Connect_PubInfo"); 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 
cmd.Parameters.Clear(); 
cmd.Parameters.Add(new SqlParameter("@Pubid", BookName)); 
conn.Open(); 
cmd.Connection = conn; 

SqlDataAdapter da = new SqlDataAdapter(); 
DataSet ds = new DataSet(); 
ds.DataSetName = "root"; 
da.SelectCommand = cmd; 
da.Fill(ds, "pub"); 

// Return the data as XML 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(ds.GetXml()); 
return xmlDoc; 

и вот сценарий действий я использую:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         xmlns:service1="services.service1.*" 
         width="529" height="322"> 

    <fx:Script> 
     <![CDATA[ 
      import com.adobe.serializers.utility.TypeUtility; 

      import mx.controls.Alert; 
      import mx.events.FlexEvent; 


      protected function dataGrid_creationCompleteHandler(event:FlexEvent):void 
      { 
       PubInfoResult.token = service1.PubInfo("FRP-Q0112"); 
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <s:CallResponder id="PubInfoResult"/> 
     <service1:Service1 id="service1" 
          fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" 
          showBusyCursor="true"/> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 


    </fx:Declarations> 
    <s:TextInput id="BookCode" x="9" y="22"/> 
    <s:DataGrid id="dataGrid" x="75" y="95" 
       creationComplete="dataGrid_creationCompleteHandler(event)" requestedRowCount="4"> 
     <s:columns> 
      <s:ArrayList> 
      </s:ArrayList> 
     </s:columns> 
     <s:typicalItem> 
      <fx:Object></fx:Object> 
     </s:typicalItem> 
     <s:AsyncListView list="{TypeUtility.convertToCollection(PubInfoResult.lastResult)}"/> 
    </s:DataGrid> 


</s:WindowedApplication> 

Я новый сгибать и веб-сервисы, так у меня возникают некоторые проблемы в этой области, любая помощь будет большим.

+0

Ваш xml правильный, и 'XmlDocument' () может загрузить ваш xml. Ваша ошибка где-то в другом месте. попробуйте напечатать 'ds.GetXml()' –

ответ

0

То, что я не делал, это установить тип возврата службы в службе данных - это Flash-построитель, как только я сделал это, чтобы ошибка была исправлена. теперь я столкнулся с другой проблемой, которую я должен исследовать. его теперь только перенастройка корневого элемента возвращаемого XML-файла, мне нужны данные в элементе.

благодарит всех за помощь.

+0

Попробуйте изменить PubInfoResult.lastResult на PubInfoResult.lastResult.pub. –

Смежные вопросы