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

时间:2015-02-11 14:24:17

标签: java soap wsdl otrs

Windows 7,Java 7 OTRS appliannce。enter image description here

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

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

我也尝试过使用Netbeans 8.我选择从wsdl文件创建Web服务,它抱怨无法找到服务或端口。然后我验证了wsdl文件,它无法找到此元素的声明,xmlns:tns =“http://www.otrs.org/TicketConnector/”>

我应该如何生成SEI与Jav​​a中的OTRS交谈?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

  2. 要访问OTRS Web服务,您必须使用SOAP。我首先在otrs服务器上运行SOAPRequest.pl,以便将所有内容弄清楚,然后从那里开始工作。在此期间,我还遇到了将名称空间uri与本地名称问题联系起来的问题。

  3. 我的工作代码在这里,

    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();
        }
    

    我提到的链接是: