我在这里为任何有兴趣从 Java 创建 OTRS 票证的人发布我的解决方案。我希望有更多有关从 Java 访问 OTRS 的文档。
从 wsdl 生成 Java 存根类是不可能的。我在任何地方都找不到任何解决方案,也没有收到这里任何人或 OTRS 论坛 - forums.otterhub.org 的任何回复。 (Google OTRS 小组不会发布我的问题。)
要访问 OTRS Web 服务,您必须使用 SOAP。我首先在 otrs 服务器上运行 SOAPRequest.pl 以弄清楚所有内容,然后从那里返回。在此期间,我还遇到了将命名空间 uri 链接到本地名称的问题。
我的工作代码在这里,
try {
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection conn = scf.createConnection();
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage msg = mf.createMessage();
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelope env = sp.getEnvelope();
env.addNamespaceDeclaration("tns", "http://www.otrs.org/TicketConnector/");
SOAPBody body = env.getBody();
SOAPBodyElement dispatch = body.addBodyElement(new QName("http://www.otrs.org/TicketConnector/", "TicketCreate", "tns"));
dispatch.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "UserLogin", "tns")).addTextNode("some user login");
dispatch.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Password", "tns")).addTextNode("some user password");
SOAPElement tkt = dispatch.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Ticket", "tns"));
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Title", "tns")).addTextNode("some title");
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Queue", "tns")).addTextNode("one of your queue names");
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Type", "tns")).addTextNode("one of your types");
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "CustomerUser", "tns")).addTextNode("some email address not customer id/name/username. Thought this could be my sys config");
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "State", "tns")).addTextNode("one of your states");
tkt.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Priority", "tns")).addTextNode("one of your priorities");
SOAPElement article = dispatch.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Article", "tns"));
article.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Subject", "tns")).addTextNode("some subject");
article.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Body", "tns")).addTextNode("some body");
article.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "ContentType", "tns")).addTextNode("text/plain; charset=utf8");
SOAPElement dynamicField = dispatch.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "DynamicField", "tns"));
dynamicField.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Name", "tns")).addTextNode("one of your dynamic field");
dynamicField.addChildElement(new QName("http://www.otrs.org/TicketConnector/", "Value", "tns")).addTextNode("your dynamic field value");
dispatch.addChildElement(tkt);
dispatch.addChildElement(article);
dispatch.addChildElement(dynamicField);
/* Print the request message */
System.out.print("Request SOAP Message:");
msg.writeTo(System.out);
System.out.println();
URL url = new URL("http://your otrs ip address/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorSOAP");
SOAPMessage resp = conn.call(msg, url);
resp.writeTo(System.out);
System.out.println();
} catch (SOAPException | UnsupportedOperationException | IOException e) {
e.printStackTrace();
}
我提到的链接是:
-
https://github.com/OTRS/otrs/tree/master/development/webservices http://links%20I%20referred%20are:%20%5Burl%5Dhttps://github.com/OTRS/otrs/tree/master/development/webservices%5B/url%5D%20(Perl%20script)%20%5Burl%5Dhttps://github.com/gtudan/OTRS-Client%5B/url%5D%20(Access%20OTRA%20via%20Java%20SOAP)%20%5Burl%5Dhttp://sastriawan.blogspot.com/2010/01/using-javaxxmlsoap-to-access-otrs-soap.html%5B/url%5D%20(Access%20OTRA%20via%20Java%20SOAP)%20%5Burl%5Dhttps://stackoverflow.com/questions/7148081/soap-message-with-javax-xml-soap-namespace-error%5B/url%5D%20(namespace%20binding)(Perl 脚本)
-
https://github.com/gtudan/OTRS-Client https://github.com/gtudan/OTRS-Client(通过 Java SOAP 访问 OTRA)
-
http://sastriawan.blogspot.com/2010/01/using-javaxxmlsoap-to-access-otrs-soap.html http://sastriawan.blogspot.com/2010/01/using-javaxxmlsoap-to-access-otrs-soap.html(通过 Java SOAP 访问 OTRA)
-
带有 javax.xml.soap 的 SOAP 消息 - 命名空间错误? https://stackoverflow.com/questions/7148081/soap-message-with-javax-xml-soap-namespace-error(命名空间绑定)