XE2 を使用して、OSX (および Windows) で実行される非常に単純な Web サービスを実装しようとしましたが、「ADOM XML v4」が Web サービス用に生成/レンダリングする XML が何らかの形で無効になっているようです。
「MSXML」で生成されたものと比較して気付いた唯一の明らかな違いは、何を変更しようとしてもエンコーディングが「UTF-16LE」に設定されているように見えることです。
誰もが同じ問題に遭遇し、それを修正する方法を知っていますか?
アップデート:
これを再現する最も簡単な方法は、単純な「SOAP サーバー アプリケーション」を作成し、生成された WebModuleUnit を次のように変更することです。
unit WebModuleUnit1;
interface
uses System.SysUtils, System.Classes, Web.HTTPApp, Soap.InvokeRegistry,
Soap.WSDLIntf, System.TypInfo, Soap.WebServExp, Soap.WSDLBind, Xml.XMLSchema,
Soap.WSDLPub, Soap.SOAPPasInv, Soap.SOAPHTTPPasInv, Soap.SOAPHTTPDisp,
Soap.WebBrokerSOAP, Xml.xmldom, Xml.adomxmldom;
type
TWebModule1 = class(TWebModule)
HTTPSoapDispatcher1: THTTPSoapDispatcher;
HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
WSDLHTMLPublish1: TWSDLHTMLPublish;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModuleClass: TComponentClass = TWebModule1;
implementation
{$R *.dfm}
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
WSDLHTMLPublish1.ServiceInfo(Sender, Request, Response, Handled);
end;
initialization
DefaultDOMVendor := 'ADOM XML v4';
// DefaultDOMVendor := 'MSXML';
end.
DOMVendor 'MSXML' を使用するとサービスは機能しますが、'ADOM XML v4' を使用すると失敗します。
これを QC に追加しました。OSX 上の Web サービスが重要だと思われる場合は、投票してください。 http://qc.embarcadero.com/wc/qcmain.aspx?d=99412