5

私は otrs-ticketsystem と対話して、いくつかの写真を作成し、いくつかの統計を計算しようとしています。これは私がしたいhaskell- 私はパッケージを使用しますsoap

import ステートメントを無視して、コードはかなり単純です。構成ファイルを使用して SOAP-Transport を作成しますsoap.cfg(以下を参照)。次に、SOAP-Body を作成し、 を使用して Web サービスを呼び出します"Dispatch"

{-# LANGUAGE OverloadedStrings #-}

import Network (withSocketsDo)
import Network.SOAP
import Network.SOAP.Transport.HTTP

import Text.XML.Writer
import Text.XML.Stream.Parse as Parse
import           Data.Text (Text)
import qualified Data.Text as T
import qualified Data.ByteString.Lazy.Char8 as BS
import Data.Configurator (load, Worth(Required))

main :: IO ()
main = withSocketsDo $ do
    transport <- confTransport "soap" =<< load [Required "./src/SOAP/soap.cfg"]
    let body = do element "TicketObject" ("TicketSearch" :: Text)
                  element "OwnerID" ("owner" :: Text)

    xmlresult <- invokeWS transport "#TicketObject" () body (RawParser id)
    BS.putStrLn xmlresult

石鹸.cfg

soap {
    url = "http://domain/otrs/rpc.pl"
    user = "testuser"
    password = "testpass"
    trace = true
    timeout = 15
    }

このプログラムをビルドして呼び出すと、次のようになりますxmlresult

リクエスト:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <TicketObject>TicketSearch</TicketObject>
        <OwnerID>heu</OwnerID>
    </soapenv:Body>
</soapenv:Envelope>

応答:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>
                SOAPAction shall match 'uri#method' if present (got 'Dispatch', expected '#TicketObject'
            </faultstring>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

次に、次の行を変更すると

xmlresult <- invokeWS transport "Dispatch" () body (RawParser id)

xmlresult <- invokeWS transport "#TicketObject" () body (RawParser id)

障害文字列は次のようになります

<faultstring>
    Denied access to method (TicketObject) in class (main) at /opt/otrs/Kernel/cpan-lib/SOAP/Lite.pm line 2810.
</faultstring>

インターネットで解決策を検索しましたが、これしか見つかりませんでした

最後のもので結果を得ることができました-しかし、iPhoneObjectとTicketGetのみ-残念ながらTicketSearchはサポートされていないようです。

リクエストの有効な XML がどのように見える必要があるか教えてもらえますか?

Web サービスを使用する SOAP リクエスト .Net を使用して otrs チケットを作成する方法も見つけましたが、残念ながらそのようなサービスを作成する方法がわかりません。

4

1 に答える 1