如何在基于SOAP的Webservice中将Dynamic数组传递给服务器

时间:2011-08-10 02:18:57

标签: java mysql web-services

我坚持这个可怕的问题,我有一个用Java实现的基于SOAP的web服务。除了其他数据之外的客户端应该有“男性”和“女性”复选框,因此用户可以选择其中一个或两个并且客户端应该将它发送到服务器以存储在数据库中,它是一个多值实体,但它给了我错误500,服务器端失败,是我传递数组然后使用它的方式在服务器端是否正确?如果不是,我怎么能通过并处理它?这是客户的代码,提前感谢您的时间:

private void salvaActionPerformed(java.awt.event.ActionEvent evt) {                                      
    // TODO add your handling code here:
    disease=malattia.getText();


    sexarra=new String[sexint];
    if(sexint==1)
        sexarra[0]=sexone;
    else if(sexint==0)
        JOptionPane.showMessageDialog(null, "Bisogna specificare almeno un valore del campo sesso", "Errore", JOptionPane.ERROR_MESSAGE);
    else{
        sexarra[0]=sexone;
        sexarra[1]=sextwo;}
        // System.out.print(sexarra[0]);
        //     System.out.println(sexarra[1]);



        description=descrizione.getText();


        agestr=eta.getText();
        if(agestr.equalsIgnoreCase(""))
            JOptionPane.showMessageDialog(null, "Il campo età non può essere vuoto", "Errore", JOptionPane.ERROR_MESSAGE);

        age=Integer.parseInt(agestr);
        if( age<=0 || age>=110){

            JOptionPane.showMessageDialog(null, "Il valore inserito nel campo età non è giusto", "Errore", JOptionPane.ERROR_MESSAGE);
        }
        else{

            try {
                URL url = new URL("http://localhost:8080/soap/servlet/rpcrouter");
                //costruzione della chiamata
                Call chiamata = new Call();
                chiamata.setTargetObjectURI("urn:ServerNeuro");
                chiamata.setMethodName("aggiungi_malattia");
                chiamata.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

                SOAPMappingRegistry smr = new SOAPMappingRegistry();
                StringDeserializer sd = new StringDeserializer ();
                smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName ("", "return"), null, null, sd);
                chiamata.setSOAPMappingRegistry(smr);


                //creazione dei parametri

                Vector parametri = new Vector();
                parametri.addElement(new Parameter("malattia", String.class, disease, null));
                parametri.addElement(new Parameter("eta", Integer.class, age, null));
                parametri.addElement(new Parameter("descrizione", String.class, description, null));
                parametri.addElement(new Parameter("sexarra",String[].class, sexarra, null));

                chiamata.setParams(parametri);
                try {
                    Response risp = chiamata.invoke(url, "");
                    if (risp.generatedFault()) {
                        Fault fault = risp.getFault();
                        System.err.println("Chimata Fallita");
                        System.err.println("Code: " + fault.getFaultCode());
                        System.err.println("descrizione: " + fault.getFaultString());
                    } else {
                        Parameter par = risp.getReturnValue();
                        msg = (String) par.getValue();
                        System.out.print(msg);
                    }
                } catch (SOAPException e) {
                    System.out.println("Errore causata da: (" + e.getFaultCode() + ") :" + e.getMessage());
                    msg = "errore";
                }

            } catch (MalformedURLException ex) {
                System.out.println("Exception: " + ex.getMessage());
            }
            System.out.println(msg);
            if (msg.equals("si")) {
                JOptionPane.showMessageDialog(null, "La registrazione è avvenuta con successo", "REGISTRAZIONE", JOptionPane.INFORMATION_MESSAGE);

            }
            else{


                JOptionPane.showMessageDialog(null, "Attenzione il utente inserito è gia esistente nel database", "ATTENZIONE", JOptionPane.ERROR_MESSAGE);
            }
        }
}                                     

private void femminaActionPerformed(java.awt.event.ActionEvent evt) {                                        
    // TODO add your handling code here:

    if(femmina.isSelected()){
        if(sexint==0){
            sexint++;
            sexone=femmina.getText();

        }

        else if(sexint==1){
            sexint++;

            sextwo=femmina.getText();
        }
        else
            sexint--;

        System.out.println(sexint);
    }
}                                       

private void maschioActionPerformed(java.awt.event.ActionEvent evt) {                                        
    if(maschio.isSelected()){
        if(sexint==0){
            sexint++;
            sexone=maschio.getText();

        }

        else if(sexint==1){
            sexint++;

            sextwo=maschio.getText();
        }
        else
            sexint--;

        System.out.println(sexint);
    }
}  

这是服务器代码:

public String aggiungi_malattia(String malattia, Integer eta,String descrizione,String[] sexarra) {
    String ris = "no";
    String q = null, w = null;
    String errore = connetti();
    //inserimeto dei dati del utente dentro la tabella login
    if(sexarra.length == 2){
        q = "INSERT INTO malattia (nome, eta, descrizione, sesso) "
            + "VALUES ('" + malattia + "','" + eta + "','" + descrizione + "','" + sexarra[0] + "')";}
    else{
        q = "INSERT INTO malattia (nome, eta, descrizione, sesso) "
            + "VALUES ('" + malattia + "','" + eta + "','" + descrizione + "','" + sexarra[0] + "')";
        w="INSERT INTO malattia (nome, eta, descrizione, sesso) "
            + "VALUES ('" + malattia + "','" + eta + "','" + descrizione + "','" + sexarra[1] + "')";
    }

    if (errore.equals("")) {
        try {
            Statement st = conn.createStatement();
            if(sexarra.lenght == 2){
                st.executeUpdate(q);
                st.executeUpdate(w);
            }
            else
                st.executeUpdate(q);
            st.close();
            conn.close();
            ris = "si";
        } catch (SQLException e) {
            System.out.println("Errore: " + e.getMessage());
            return ris;
        }
    }   
    return ris;
}

这是Catalina的最后一行。对我来说没有任何意义。我怀疑阵列可能会因为它在运行时确定而导致它,我找不到任何其他方法来做到这一点,这里的提示将不胜感激

    Jul 20, 2011 11:35:22 PM org.apache.catalina.realm.CombinedRealm startInternal
    SEVERE: Failed to start "org.apache.catalina.realm.UserDatabaseRealm/1.0" realm
    org.apache.catalina.LifecycleException: No UserDatabase component found under key UserDatabase
        at org.apache.catalina.realm.UserDatabaseRealm.startInternal(UserDatabaseRealm.java:264)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
        at org.apache.catalina.realm.CombinedRealm.startInternal(CombinedRealm.java:201)
        at org.apache.catalina.realm.LockOutRealm.startInternal(LockOutRealm.java:120)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1026)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
    Jul 20, 2011 11:35:22 PM org.apache.catalina.startup.HostConfig deployWAR
    INFO: Deploying web application archive soap.war
    Jul 20, 2011 11:35:23 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory manager
    Jul 20, 2011 11:35:23 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory examples
    Jul 20, 2011 11:35:24 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory ROOT
    Jul 20, 2011 11:35:24 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory host-manager
    Jul 20, 2011 11:35:25 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory docs
    Jul 20, 2011 11:35:25 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory axis
    - Unable to find config file.  Creating new servlet engine config file: /WEB-INF/server-config.wsdd
    Jul 20, 2011 11:35:26 PM org.apache.coyote.AbstractProtocolHandler start
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    Jul 20, 2011 11:35:26 PM org.apache.coyote.AbstractProtocolHandler start
    INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    Jul 20, 2011 11:35:26 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3780 

不幸的是,即使在更改了我认为可能会抛出NPE的代码之后,它仍然没有改变任何东西。我改变了          如果(sexarra [1] == NULL){....}

要          if(sexarra.lenght == 2){...}

我收到以下错误:

      Errore causata da: (SOAP-ENV:Protocol) :Unsupported response content type "text/html; charset=utf-8", must be: "text/xml". Response was:

Apache Tomcat / 7.0.14 - 错误报告

HTTP状态500 -

类型异常报告

消息

描述服务器遇到内部错误(),导致服务器无法完成此请求。

异常

javax.servlet.ServletException: Error building response envelope: java.lang.NullPointerException
        org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:418)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

注意 Apache Tomcat / 7.0.14日志中提供了根本原因的完整堆栈跟踪。

这是“由catalina.out引起的grep”的输出

  grep: by: No such file or directory
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.lang.ClassNotFoundException: org.apache.catalina.startup.Bootstrap
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.lang.ClassNotFoundException: org.apache.catalina.startup.Bootstrap
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.SocketException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8080
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use
    catalina.out:Caused by: java.net.BindException: Address already in use <null>:8009
    catalina.out:Caused by: java.net.BindException: Address already in use

0 个答案:

没有答案