Я пытаюсь взаимодействовать с системой otrs-ticket, чтобы сделать несколько снимков и подсчитать некоторую статистику. Это я хочу сделать в haskell
— я использую пакет soap
.
Игнорируя операторы импорта, код довольно прост, я создаю SOAP-транспорт с файлом конфигурации soap.cfg
(см. ниже). Затем создайте тело SOAP и вызовите веб-службу с помощью "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
soap.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)
to
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/docs/otrs/master/kernel_system_ticketsearch.html о поиске билетов и, конечно, API OTRS 3.3
- http://blog.otrs.org/2010/05/28/soap-hot-potatoe-reporting2/ -› поиск билетов (perl)
- Клиент OTRS на Java
- iPhoneObject OTRS, предоставляющий JSON
с последним мне удалось получить результат - но только для iPhoneObject и TicketGet - к сожалению, TicketSearch, похоже, не поддерживается.
Может ли кто-нибудь сказать мне, как должен выглядеть действительный XML для запроса?
Я также нашел Как создать билет otrs с помощью запроса мыла .Net, который использует веб-сервисы, но, к сожалению, я не знаю, как создать такую услугу.
OwnerID
следует заменить наOwnerIDs
- person palik   schedule 16.03.2019