Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [java] inviare un oggetto ad un web service tramite axis e soap

    ciao ragazzi

    In pratica voglio invocare un servizio presente in un web service da una pagina jsp.

    Il servizio del web service è il seguente:


    public static boolean addPreference(Preference pref) {



    }



    In pratica riceve in input l’oggetto Preference che è cosi fatto:


    package abstractinterface.AAI.Aobject;

    import java.util.*;
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;


    public class Preference implements Serializable {

    protected String name;
    protected String slot;
    protected Vector conditions;
    protected Action action;
    protected String prob;
    protected Vector parameters;


    public Preference(){
    }

    public void setName(String n) {
    this.name = n;
    }

    public String getName() {
    return name;
    }

    public void setSlot(String s) {
    this.slot = s;
    }

    public String getSlot() {
    return slot;
    }

    public void setConditions(Vector v) {
    this.conditions = v;
    }

    public Vector getConditions() {
    return conditions;
    }

    public void setAct(Action a) {
    this.action = a;
    }

    public Action getAction() {
    return action;
    }

    public void setProb(String a) {
    this.prob = a;
    }

    public String getProb() {
    return prob;
    }

    public void setParameters(Vector v) {
    this.parameters = v;
    }

    public Vector getParameters() {
    return parameters;
    }



    }



    Come vedi questo oggetto contiene al suo interno un vector di oggetti Condition e di oggetti Parameter, e un oggetto Action.
    Dopo aver scritto il codice del metodo ne ho effettuato il deploy con il seguente file wsdd:

    <deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <service name="urn:AAI" provider="java:RPC" style="rpc" use="encoded">
    <parameter name="className" value="abstractinterface.AAI.AAI"/>
    <parameter name="allowedMethods" value="updateService, newService, userMessage, getAvailableActionPartialOrder, actionHandler, inizialize, register, stopService, getRooms, deleteService, addPreference"/>
    <parameter name="scope" value="Session"/>

    <beanMapping qname="myNS:User" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.User"/>
    <beanMapping qname="myNS:Service" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.Service"/>
    <beanMapping qname="myNS:Action" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.Action"/>
    <beanMapping qname="myNS:Condition" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.Condition"/>
    <beanMapping qname="myNS:Parameter" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.Parameter"/>
    <beanMapping qname="myNS:Preference" xmlns:myNS="urn:AAI"
    languageSpecificType="java:abstractinterface.AAI.A object.Preference"/>



    <requestFlow>
    <handler type="soapmonitor"/>
    </requestFlow>
    <responseFlow>
    <handler type="soapmonitor"/>
    </responseFlow>
    </service>

    </deployment>


    Dove vengono deployati anche altri servizi, quello che conta per adesso, come detto , è addPreference.

    Quello che ti chiedo è cosa dovrei scrivedere nella pagina jsp (per serializzare gli oggetti) e nel metodo addPreference per deserializzarli.
    Premetto che gli altri servizi funzionano ma fanno uso solo di tipi predefiniti e di un solo oggetto. (non oggetti incapsulati tra loro)

    Posto il codice che uso nella jsp ( in realtà lo scrivo per provarlo prima in una classe java, con eclipse):

    Call call = (Call) new Service().createCall();
    call.setTargetEndpointAddress(new URL(webServicePath));

    Preference pref = new Preference();

    Vector conditions = new Vector();
    Condition cond = new Condition();
    cond.setId("9");
    cond.setService("nomecondition");
    cond.setStatus("status");
    conditions.add(cond);
    pref.setConditions(conditions);

    Action act = new Action();
    act.setActionID(9);
    act.setDescription("gestione");
    pref.setAct(act);


    pref.setName("pref_name");
    pref.setProb("pref_prob");
    pref.setSlot("pref_slot");

    QName qnamePref = new QName("urn:AAI","Preference");
    Class classPref = Preference.class;
    call.registerTypeMapping(classPref, qnamePref, BeanSerializerFactory.class, BeanDeserializerFactory.class);


    QName qnameProd = new QName("urn:AAI","Action");
    Class classProd = Action.class;
    call.registerTypeMapping(classProd, qnameProd, BeanSerializerFactory.class, BeanDeserializerFactory.class);

    QName qnameCond = new QName("urn:AAI","Condition");
    Class classCond = Condition.class;
    call.registerTypeMapping(classCond, qnameCond, BeanSerializerFactory.class, BeanDeserializerFactory.class);

    QName qnameParam = new QName("urn:AAI","Parameter");
    Class classParam = Parameter.class;
    call.registerTypeMapping(classParam, qnameParam, BeanSerializerFactory.class, BeanDeserializerFactory.class);

    QName qnameServ = new QName("urn:AAI","Service");
    Class classServ = Action.class;
    call.registerTypeMapping(classServ, qnameServ, BeanSerializerFactory.class, BeanDeserializerFactory.class);


    call.setOperationName(new QName("urn:AAI", "addPreference"));
    Object rispostaWS = call.invoke(new Object[] { pref });
    success = (Boolean) rispostaWS;

    Nel codice postato, ci ho messo per ogni classe utilizzata lo stresso gruppo di istruzioni, non so se invece basta metterci solo quelle per l’oggetto Preference.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324
    Ciao,

    hai risolto il problema alla fine?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.