开发者

Passing Array to SOAP causes Error 500

im stuck in this terrible problem, I have a SOAP based webservice implemented in Java.The client besides other data is supposed to have "male" and "female" checkboxes so the user can either select one of them or both and the client is supposed to send it to the server to be stored in the database, where it is an multivalued entity, but it gives me Error 500, the failure on Server side here is the code for Client, Thanks in advance for your time:

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

        }

        el开发者_如何学运维se 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);
    }
}  

Here is the Server Code:

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[1]== null){
        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[1]==null){
                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;
}

This is last lines of Catalina.out it doesn't make any sense to me.I suspect that the Array might be causing it since its determined at run-time, i couldn't find any other way to do it, hints here will be appreciated

    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 


The exception at the UserDatabaseRealm means a failure setting the authentication policies.

Have you tried accessing your server through a webpage (using a browser)?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜