java - OTRS:使用 wsdl 生成 Java SEI 时出错

标签 java soap wsdl otrs

Windows 7、Java 7 OTRS 设备。 enter image description here

我正在尝试使用 wsimport 来生成 Java SEI 以及 https://raw.githubusercontent.com/OTRS/otrs/master/development/webservices/GenericTicketConnectorSOAP.wsdl 中的 wsdl 文件。

我在命令提示符下尝试(以管理员身份运行),但它给了我错误(请参阅附件)并且没有生成任何内容。

我还尝试使用 Netbeans 8。我选择从 wsdl 文件创建 Web 服务,但它提示找不到服务或端口。然后我验证了 wsdl 文件,它找不到此元素的声明 xmlns:tns="http://www.otrs.org/TicketConnector/">

我应该如何生成 SEI 来与 Java 中的 OTRS 对话?

谢谢。

最佳答案

我在这里为有兴趣从 Java 创建 OTRS 票证的任何人发布我的解决方案。我希望有更多有关从 Java 访问 OTRS 的文档。

  1. 无法从 wsdl 生成 Java stub 类。我在任何地方都找不到任何解决方案,也没有收到这里任何人或 OTRS 论坛 - forums.otterhub.org 的任何回复。 (Google OTRS 小组不会发布我的问题。)

  2. 要访问 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();
    }

我提到的链接是:

关于java - OTRS:使用 wsdl 生成 Java SEI 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456702/

相关文章:

java - 骰子公式评估器

java - 生成的 Java 类的 @XmlSeeAlso 注释中缺少类

php - Soap 客户端复杂类型 PHP 请求

java - 按字符串的前 6 个字符对字符串进行排序

java - 在 ORACLE 作为数据库的情况下,在 SPRING-Hibernate 应用程序中使用 BLOB 给出 "java.lang.ClassNotFoundException: oracle.sql.BLOB"!

java - Camel-CXF 不加 SOAP :Header to Request when run inside Apache Karaf

wcf - 从soapUI到WCF的WS-Security - 绑定(bind)和配置

xml - Response.Return_ 标签中的名称 "return"与 *Result.XMLName 中的名称 "Result"冲突

perl - 如何替换 SOAP::WSDL 中的 LWP 句柄?

Java和MySQL查询日期