我尝试与 otrs-ticketsystem 进行交互,以便制作一些图片并计算一些统计数据。这是我想做的haskell
——我使用包soap
。
忽略导入语句,代码相当简单,我用配置文件创建了一个 SOAP-Transport soap.cfg
(见下文)。然后构造 SOAP-Body 并使用"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>
我在互联网上搜索了一些解决方案,我只找到了这个
- http://otrs.perl-services.de/...</a> 关于票务搜索,当然还有OTRS 3.3 API
- http://blog.otrs.org -> 票务搜索 (perl)
- Java 中的 OTRS 客户端
- 提供 JSON 的 OTRS iPhoneObject
最后一个我成功地获得了结果-但仅适用于 iPhoneObject 和 TicketGet-不幸的是,TicketSearch 似乎不受支持。
谁能告诉我请求的有效 XML 需要是什么样的?
我还发现了 How to create an otrs ticket using a soap request .Net - 它使用 Web 服务 - 但不幸的是我不知道如何创建这样的服务。