allgemeine Datenbankschnittstelle für Webservice

Status
Nicht offen für weitere Antworten.
S

snoopy007

Gast
Hallo,

vielleicht hat ja schon jemand eine Lösung für die Fragestellung.

Realisieren gerade eine Schnittstelle per Webservice. Serverseitig hängt eine Datenbank dran.
Client soll nun in der Lage sein, die DB per Webservice abzufragen.

Stelle mir das ganze vor:
getDatas (tabelle, spalte, typ)
setDatas (tabelle,dpalte,typ).

Problem ist nun der Rückgabewert. Mal ist es ein Integer, mal ein String, dann wieder bool ...
Wie könnte man das realisieren.

Schonmal merci,
snoopy007
 

Niki

Top Contributor
Ich hätte zwei Ansätze.
1.) Voraussetzungen der Client läuft unter Java und hat die selbe Runtime Version:
Du baust als return-Wert einen ComplexType mit der Information um welchen Typ es sich handelt. Der Wert selbst wird als byte[] serialisiert zurück geliefert (primitive Typen sollten gewrappt werden):

Code:
<complexType name="ReturnType">
    <sequence>
     <element name="object" nillable="true" type="xsd:base64Binary"/>
     <element name="type" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>

2.) Du baust einen ComplexType der den Typ zurück liefert und für jeden möglichen Typ ein eigenes Feld:

Code:
 <complexType name="ReturnType">
    <sequence>
     <element name="intVal" nillable="true" type="xsd:int"/>
     <element name="longVal" nillable="true" type="xsd:long"/>
     <element name="stringVal" nillable="true" type="xsd:string"/>
     <element name="type" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
 
S

snoopy007

Gast
Hallo,


erstmal Dank für Deine Antwort. Bin aber leider nicht so der Freak :wink: .
Kannst Du es mit Javacode ein wenig mehr auffüllen ? :applaus:

Schonmal Danke,
snoopy007
 

Niki

Top Contributor
Ok, ich mache das ganze mit axis und ant. Hier die notwendigen files:

Interface MyWebService
Code:
public interface MyWebService extends java.rmi.Remote {
    public service.ReturnType foh() throws java.rmi.RemoteException;
    public service._ReturnType _foh() throws java.rmi.RemoteException;
}

Implementierung MyWebServiceImpl
Code:
public class MyWebServiceImpl implements MyWebService {

	public _ReturnType _foh() throws RemoteException {
		// Query...
		_ReturnType rt = null;
		try {
			String s = "Result";
			rt = new _ReturnType();
			rt.setType("java.lang.String");
			rt.setObject(getObjectAsBytes(s));
		} catch (Exception ex) {
			throw new RemoteException("object cannot get serialized", ex);
		}

		return rt;

	}

	public ReturnType foh() throws RemoteException {
		ReturnType rt = new ReturnType();
		rt.setStringVal("Result");
		rt.setType("java.lang.String");
		return rt;
	}

	private byte[] getObjectAsBytes(Object o) throws Exception {
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(bos);
		oos.writeObject(o);
		oos.flush();
		oos.close();
		return bos.toByteArray();
	}

}

ReturnType Möglichkeit1
Code:
public class ReturnType  implements java.io.Serializable {
    private java.lang.Integer intVal;

    private java.lang.Long longVal;

    private java.lang.String stringVal;

    private java.lang.String type;

  //getter und setter

Return Type Möglichkeit2
Code:
public class _ReturnType  implements java.io.Serializable {
    private byte[] object;

    private java.lang.String type;

  //getter und setter

build.xml für ant
Code:
<?xml version="1.0"?>
<project name="WebService" default="java2wsdl" basedir=".">

	<property name="sys.dir" value="C:/Allg/_system" />
	<property name="src.dir" value="${basedir}/src" />
	<property name="classes.dir" value="${basedir}/classes" />

	<property name="axis.home" value="${sys.dir}/axis/1.4" />


	<path id="axis.classpath">
		<fileset dir="${axis.home}/lib">
			<include name="**/*.jar" />
		</fileset>
	</path>

	<taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />

	<target name="prepare">
		<mkdir dir="${classes.dir}" />
		<mkdir dir="${lib.dir}" />
	</target>

	<target name="clean">
		<delete dir="${classes.dir}" failonerror="false" />
		<delete dir="${lib.dir}" failonerror="false" />
	</target>

	<target name="compile" depends="prepare">
		<javac srcdir="${src.dir}" destdir="${classes.dir}">
			<classpath refid="axis.classpath" />
		</javac>
	</target>

	<target name="java2wsdl">
		<axis-java2wsdl classname="service.MyWebService"
		                location="http://localhost:8080/myapp/services/mywebservice"
		                namespace="urn:mywebservice"
		                output="myservice.wsdl"
		                style="RPC">
			<classpath path="${basedir}/classes" />
		</axis-java2wsdl>
	</target>

	<target name="wsdl2java">
		<axis-wsdl2java output="${src.dir}"
		                testcase="false"
		                serverside="true"
		                verbose="true"
		                url="myservice.wsdl"
		                implementationclassname="service.MyWebServiceImpl">
			<mapping namespace="urn:mywebservice" package="service" />
		</axis-wsdl2java>
	</target>


</project>

Bekommst du eigentlich immer nur einen Wert zurück oder ganze ResultSets? Wenn es viele Zeilen und Spalten sind muss man natürlich das ganze ResultSet als Liste von Object-Arrays zurück liefern. Am besten auch ein eigenes kleines ResultSetMetaData Object erzeugen, welche die Spaltennamen und Typen beinhaltet
 

Niki

Top Contributor
Soda, habs verbessert:

Interface:
Code:
public interface MyWebService extends java.rmi.Remote {
    public service.Result select(java.lang.String in0) throws java.rmi.RemoteException;
}

Implementierung WebService:
Code:
public class MyWebServiceImpl implements MyWebService {

	public Result select(String query) throws RemoteException {
		Result result = new Result();
		// Connection sollte aus einem Pool geholt werden
		Connection con = null;
		Statement stmt = null;
		java.sql.ResultSet rs = null;
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(query);
			java.sql.ResultSetMetaData rsMeta = rs.getMetaData();
			result.setMetaData(getMetaData(rsMeta));
			List tmp = new ArrayList();
			while (rs.next()) {

				Row row = new Row();
				ColumnValue[] cvs = new ColumnValue[rsMeta.getColumnCount()];
				for (int i = 1; i <= rsMeta.getColumnCount(); i++) {
					ColumnValue cv = new ColumnValue();
					switch (rsMeta.getColumnType(i)) {
					case Types.INTEGER:
						cv
								.setValue(getObjectAsBytes(new Integer(rs
										.getInt(i))));
						break;

					case Types.VARCHAR:
						cv.setValue(getObjectAsBytes(rs.getString(i)));
						break;

					case Types.TIMESTAMP:
						cv.setValue(getObjectAsBytes(rs.getTimestamp(i)));
						break;
					// alle möglichen Type abfragen
					}
					cvs[i - 1] = cv;
				}
				row.setValues(cvs);
				tmp.add(row);
			}

			Row[] rows = new Row[tmp.size()];
			tmp.toArray(rows);
			ResultSet resultSet = new ResultSet();
			resultSet.setRows(rows);
			result.setResultSet(resultSet);
		} catch (Exception ex) {
			throw new RemoteException(
					"Statement konnte nicht durchgeführt werden", ex);
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (stmt != null)
					stmt.close();
				// Connection sollte hier in den Pool zurück gelegt werden
			} catch (Exception ex) {

			}
		}

		return result;
	}

	private ResultSetMetaData getMetaData(java.sql.ResultSetMetaData rsMeta)
			throws SQLException {
		ResultSetMetaData meta = new ResultSetMetaData();
		Column[] cols = new Column[rsMeta.getColumnCount()];
		for (int i = 0; i < cols.length; i++) {
			Column col = new Column();
			String name = rsMeta.getColumnName((i + 1));
			String type = rsMeta.getColumnTypeName((i + 1));
			col.setName(name);
			col.setType(type);
			cols[i] = col;
		}
		meta.setColumns(cols);

		return meta;
	}

	private byte[] getObjectAsBytes(Object o) throws Exception {
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(bos);
		oos.writeObject(o);
		oos.flush();
		oos.close();
		return bos.toByteArray();
	}

}

ResultSetMetaData:
Code:
public class ResultSetMetaData  implements java.io.Serializable {
    private service.Column[] columns;

//getter und setter
}

ResultSet:

Code:
public class ResultSet  implements java.io.Serializable {
    private service.Row[] rows;

    public ResultSet() {
    }

//getter und setter
}

Result:
Code:
public class Result  implements java.io.Serializable {
    private service.ResultSetMetaData metaData;

    private service.ResultSet resultSet;

//getter und setter
}

Column:
Code:
public class ColumnValue  implements java.io.Serializable {
    private byte[] value;

    public ColumnValue() {
    }

//getter und setter
}

ColumnValue:
Code:
public class Column  implements java.io.Serializable {
    private java.lang.String name;

    private java.lang.String type;

//getter und setter
}
 

JavaLearn

Bekanntes Mitglied
muss man die build.xml mitrealisieren ...?! muss diese selbst erzeugt werden oder kann das der Axis2 automatisch erstellen?!
 

Niki

Top Contributor
bei axis1.x musst du das build.xml selber schreiben, bei axis2 wird dir zwar ein build.xml generiert, du musst aber trotzdem ein .xml für ant schreiben
 

JavaLearn

Bekanntes Mitglied
hierzu müssen doch noch setter und getter implementiert werden, damit das ganze funktioniert ?

habe das mal so realisert bei mir tritt ein Fehler hier auf:

Code:
row.setValues(cvs);

muss ich die setValues Methode selbst in eine Klasse setzen?
 

Niki

Top Contributor
Die Klasse Row sollte so aussehen:
Code:
public class Row  implements java.io.Serializable {
    private service.ColumnValue[] values;

    public Row() {
    }

    public Row(
           service.ColumnValue[] values) {
           this.values = values;
    }


    /**
     * Gets the values value for this Row.
     * 
     * @return values
     */
    public service.ColumnValue[] getValues() {
        return values;
    }


    /**
     * Sets the values value for this Row.
     * 
     * @param values
     */
    public void setValues(service.ColumnValue[] values) {
        this.values = values;
    }
}
 

JavaLearn

Bekanntes Mitglied
danke, werde das gleich mal mit implementieren ...

hier habe ich die setter und getter so gesetzt?

Code:
public class Result  implements java.io.Serializable { 
    private ResultSetMetaData metaData; 

    private ResultSet resultSet;

	public void setMetaData(telekom.ResultSetMetaData metaData) {
		this.metaData = (ResultSetMetaData) metaData;
		// TODO Auto-generated method stub
	}
	
	public ResultSetMetaData getMetaData() {
		return metaData;
	}

	public void setResultSet(ResultSet resultSet2) {
		this.resultSet = resultSet;
		// TODO Auto-generated method stub
		
	}
    
	public ResultSet getResultSet() {
		return resultSet;
}	}

ist das ok so?!
 

Niki

Top Contributor
Ja, schaut richtig aus. Die getter und setter kannst du dir genereiren lassen. In Eclipse mit Strg + Shift + G
oder mit Rechts klick -> Source -> Generate Getters and Setters
 

Niki

Top Contributor
JavaLearn hat gesagt.:
Code:
	public void setResultSet(ResultSet resultSet2) {
		this.resultSet = resultSet;
		// TODO Auto-generated method stub
		
	}

ist das ok so?!

mach aus resultSet2 nur resultSet oder this.resultSet = resultSet2; sonst hat das Statement keinen Sinn
 

JavaLearn

Bekanntes Mitglied
danke, oh stimmt habe ich selbst übersehen kriege wenn ich ein Statement ausführen will diese Fehelermeldung:

Code:
Exception in thread "main" java.rmi.RemoteException: Statement konnte nicht durchgeführt werden; nested exception is: 
	java.lang.ClassCastException: telekom.ResultSetMetaData
	at service.MyWebServiceImpl.select(MyWebServiceImpl.java:73)
	at service.Ausfuhren.main(Ausfuhren.java:25)

der service ist doch das Package ?!
 
G

Guest

Gast
habe mal die setter und getter so gesetzt stimmt das so, kannst du mal bitte nachschauen?!

Column:
Code:
public class Column  implements java.io.Serializable { 
    private java.lang.String name; 

    private java.lang.String type;

	public void setName(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}

	public void setType(String type) {
		// TODO Auto-generated method stub
		this.type = type;
	} 

//getter und setter 
}

ColumValue:
Code:
public class ColumnValue  implements java.io.Serializable { 
    private byte[] value; 

    public ColumnValue() { 
    }

	public void setValue(byte[] objectAsBytes) {
		this.value = objectAsBytes;
		// TODO Auto-generated method stub
		
	}

	public byte[] getValue() {
		return value;
	}

//getter und setter 
}


Result:
Code:
public class Result  implements java.io.Serializable { 
    private ResultSetMetaData metaData; 

    private ResultSet resultSet;

	public void setMetaData(telekom.ResultSetMetaData metaData) {
		this.metaData = (ResultSetMetaData) metaData;
		// TODO Auto-generated method stub
	}
	
	public ResultSetMetaData getMetaData() {
		return metaData;
	}

	public void setResultSet(ResultSet resultSet2) {
		this.resultSet = resultSet2;
		// TODO Auto-generated method stub
		
	}
    
	public ResultSet getResultSet() {
		return resultSet;
	}


//getter und setter 
}

ResultSet:
Code:
public class ResultSet  implements java.io.Serializable { 
    private Row[] rows; 

    public ResultSet() { 
    } 

    public void setRows(Row[] rows) {
    	this.rows = rows;
    }
    
    public Row[] getRows() {
    	return rows;
    }
}


ResultSetMetaData
Code:
public class ResultSetMetaData  implements java.io.Serializable { 
    private Column[] columns; 

    
	public void setColumns(Column[] columns) {
		// TODO Auto-generated method stub
		this.columns = columns;
	}

	public Column[] getColumns() {
		// TODO Auto-generated method stub
		return columns;
	} 
    
//getter und setter 
}
 

Niki

Top Contributor
Ja, schaut ja recht vernünfig aus, hast du jetzt auch schon das webservice generieren lassen?
 

JavaLearn

Bekanntes Mitglied
Ich habe das ganz normal als Java Code erstmal realisert und da tritt wenn ich das ausführe folgender fehler auf...

Code:
Exception in thread "main" java.rmi.RemoteException: Statement konnte nicht durchgeführt werden; nested exception is: 
	java.lang.ClassCastException: service.ResultSetMetaData
	at service.MyWebServiceImpl.select(MyWebServiceImpl.java:73)
	at service.Ausfuhren.main(Ausfuhren.java:25)
Caused by: java.lang.ClassCastException: service.ResultSetMetaData
	at service.Result.setMetaData(Result.java:11)
	at service.MyWebServiceImpl.select(MyWebServiceImpl.java:38)
	... 1 more


das sql kommando wird nicht ausgeführt...
 

JavaLearn

Bekanntes Mitglied
Ich hätte da noch eine Frage. Die build.xml, wenn ich die schreibe wohin muss die abgelegt werden, zum Service oder auf die Client Seite?

Denn wenn ich ein Dynamic Web Projekt realisiere und das alles generiere, erzeugt mir der Axis2 eine build.xml auf der Client Seite.
 

Niki

Top Contributor
die build.xml brauchst du nirgends, die ist zum erzeugen des aar files mittels ant. mach mal einen rechts klick auf das build.xml und sag Run As... Ant Build...
Dort kannst du dann sagen jar.server und dann wird das aar file erstellt
 

JavaLearn

Bekanntes Mitglied
dank dir, hätte noch eine Frage, was ich nicht ganz verstehe für was dient dann dieses build.xml? Ist dieses build.xml unbedingt nötig?

Wäre dankbar wenn du mir hierzu eine Antowort geben könntest. Danke
 

Niki

Top Contributor
Die build.xml Datei ist eine art batch-Datei und kann mittels ant übersetzt werden. Darin werden einige Targets definiert die man ausführen kann. Wenn du z.B. das Target jar.server auswählst wird die aar Datei erstellt. Ant ist ein nettes Tool um deployn von Applikationen. Es kann nicht schaden wenn du dich ein bisschen einliest...
 

JavaLearn

Bekanntes Mitglied
ah ok interessant d.h man kann so gut wie ein build.xml erstellen und diese fast für jeden Service benutzen?!

Dank dir nochmal, werde mich dann mal einlesen und ein build.xml erstellen.
 

Niki

Top Contributor
ja genau, wenn du in der build.xml properties für serviceinterface, implemtierung, namespace, location.... erstellst, brauchst du nur die properties ändern und kann sehr schnell services generieren lassen
 

JavaLearn

Bekanntes Mitglied
Hi,

kannst du mal bitte hier drüber schauen?!
Danke

habe folgendes Problem soll den Inhalt einer tabelle z.B. "select last_name, first_name, geb_date from employees where employee_id = ?" ausgeben können als java Objekt..

Wie muss ich ncoh meine Methode getPerson füllen damit ich das als Java Objekt "retun" kann.
Habe nun folgendes gemacht:
das Hauptproblem die Mehtode zum eingeben der Employee_id:
Code:
	public Person getPerson(int Id) {
		Person person = null;
		//TODO
		
		Connection conn = null;
		ResultSet  rs   = null;
		PreparedStatement  stmt = null;
		
		String Sql = "Select last_name, first_name, geb_id from employees where employee_id = ?"; 
		try
		{
			Class.forName(DbDrv);
			conn = DriverManager.getConnection( DbUrl, User, Pwd );
			stmt = conn.prepareStatement(Sql);
			stmt.setInt(1, Id);
			
			rs = stmt.executeQuery();
		}catch (Exception ex) {
			ex.printStackTrace();
		}
		
		
		return person;
	
	}
 

Niki

Top Contributor
füge folgendes nach rs = stmt.executeQuery() ein:

Code:
if(rs.next()){
  person = new Person();
  person.setNachname(rs.getString("last_name"));
  person.setVorname(rs.getString("first_name"));
  person.setGebDatum(rs.getDate("geb_id"));
}
rs.close();
stmt.close();
conn.close();

nur so ein Tipp. Du solltest nicht für jedes Statement eine neue Connection aufmachen, da das sehr Ressourcen-fressend ist. Bau die Connection einmal auf und halte sie irgendwo in einem statischen Kontext. Am Ende von jedem Datenbankzugriff solltest du deine Resourcen schließen:

Code:
rs.close();
stmt.close();

die Connection sollte erst am Ende der Applikation geschlossen werden, bzw. verwende einen ConnectionPool
 

JavaLearn

Bekanntes Mitglied
Hi, erstmal danke für deine Hilfe, habe die Veränderungen vorgenommen...

Nun wollte ich das ganze ausführen dies habe ich auch gemacht nur wird mir nach meiner Eingabe der Employee_id folgendes ausgegeben:
Code:
package_name.TestStub$Person@1632847

Mmh hast du vielleicht eine Idee woran das liegen kann?! Danke
 

Murray

Top Contributor
Sieht nach dem Resultat von Object#toString aus - überschreibe doch in der Klasse Person die Methode toString mit einem anderen Verhalten, z.B. so:

Code:
public String toString() {
  return super.toString() + 
            "[Nachame=" + getNachname() + 
            ",Vorname=" + getVorname() + 
            ",GebDatum=" + getGebDatum() + "]";
}
 

JavaLearn

Bekanntes Mitglied
MMh das habe ich nicht ganz verstanden meinst du ich soll eine Methode toString erstellen und diese in der Methode Person aufrufen?!
 

Murray

Top Contributor
Nur in der Klasse Person die Methode überschreiben, aufgerufen wird die offenbar schon irgendwo (denn irgendwie muss die gepostete Ausgabe ja zustandekommen).
 

Niki

Top Contributor
Nein, schreib einfach eine Methode
Code:
public String toString(){
  return vorname + " " + nachname + ", " + gebDatum;
}
in deiner Klasse Person, sonst brauchst du nichts zu machen!
 

JavaLearn

Bekanntes Mitglied
ja ok, und muss ich dann vorname, nachname, geb_datum hier noch als lokale variable definieren?

und wie kann nun der Client somit die Richtige Antwort bekommen, denn ich setze im Client in der Methode Person die id damit die ausgabe erfolgen kann?
 

JavaLearn

Bekanntes Mitglied
ja stimmt stand eben völlig auf dem schlauch...;)
ok habe die Methode eingefügt und alles nochmal generieren lassen und es wird immer noch dasselbe ausgegeben...
 

JavaLearn

Bekanntes Mitglied
Ok die Ausgabe erfolgt nun nur habe ich jetzt das Problem, dass das Datum nicht angezeigt wird da tritt dies hier auf:
Code:
java.util.GregorianCalendar[time=156034800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=1974,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=346,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=3600000,DST_OFFSET=0]
 

Niki

Top Contributor
Wenn du ein Calendar Objekt hast kannst du das mit getTime zu einem Datum umwandeln. Das Datum kann man dann schön ausgeben lassen (mittels SimpleDateFormat):
Code:
Calendar cal = ....
Date d = cal.getTime();
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
String dateAsString = format.format(d);
 

JavaLearn

Bekanntes Mitglied
Soll ich das als Methode erstellen?!
Und ich müsste irgendwie die ColumnNamen darstellen das ist nur mit ResultSetMetaData möglich?
 

Niki

Top Contributor
Genau, im ResultSetMetaData stehen die Spaltennamen und Typen drinnen. Obigen Code kannst du einbauen wo immer du das Datum formatiert ausgeben möchtest. Ich kann dir nicht genau sagen wo das bei dir Sinn macht. Du kannst aber in der Person eine Methode getGebDatumAsString implementieren:
Code:
  private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("dd.MM.yyyy");

  public String getGebDatumAsString(){
    return DATEFORMAT.format(gebDatum);
  }
 

JavaLearn

Bekanntes Mitglied
Das mit dem Datum hab ich auch hinbekommen, dank dir...

habe mal für das ResultSetMetaData folgendes gemacht: Könnte man dies so realisieren oder müsste ich mehrere setter und getter in diesem Fall 3 von denen definieren?

Code:
	ResultSetMetaData rsmd = rs.getMetaData();
	int i, n =rsmd.getColumnCount();
	for (i=1; i<=n; i++) {
	               	person = new Person();
		person.setColumn(rsmd.getColumnName(i));
			}
 

Niki

Top Contributor
So wird das nicht funktionieren. Was willst du genau machen? Du wirst schon auf die Spaltennamen abfragen müssen.
Der index beginnt bei ResultSetMetaData bei 0, nicht bei 1
 

JavaLearn

Bekanntes Mitglied
ich würde sehr gerne die drei Spaltennamen hier ausgeben können auf der Client Seite, somit ist klar welcher Inhalt zu wem gehört...
 

Niki

Top Contributor
Probiers mal so:
Code:
MyWebService service = locator.getmywebservice();
		Result res = service.select("select * from person");
		service.ResultSetMetaData meta = res.getMetaData();
		for (Column c : meta.getColumns()) {
			System.out.print(c.getName() + " (" + c.getType() + ")\t");
		}
		System.out.println();
		for (Row row : res.getResultSet().getRows()) {
			for (ColumnValue cv : row.getValues()) {
				System.out.print(deserializeObject(cv.getValue()) + "\t");
			}
			System.out.println();
		}
 

JavaLearn

Bekanntes Mitglied
soll das ganze in die klasse Test also nicht in die Klasse Person?

und hierzu muss ich doch noch setter und getter setzen ?
 

Niki

Top Contributor
Das hat nichts mit der Klasse Person zu tun. Diesen Code kannst du in eine main Methode geben. Hast du das WebService genauso implementiert wie ich es gepostet habe? Wenn ja sollte der Code so funktionieren. Bei mir tut er das
 

JavaLearn

Bekanntes Mitglied
Ich habe als Webservice dies hier gemacht deins hat bei mir nicht ganz geklappt...

Klasse Person
Code:
ok

Klasse Test:
Code:
ok
 

Niki

Top Contributor
Ich glaube dir ist nicht ganz bewusst was ein WebService ist. Läuft das ganze bei dir in einem WebContainer wie z.B. Tomcat?
 

JavaLearn

Bekanntes Mitglied
ja genau mit Apache Tomcat und Axis2...
ich erstelle bei eclipse ein dynamic web project und generiere diesen als Webservice, anschlißend erstelle ich den client ebenso und schreibe dazu eine Klasse mit einem main z.b so:
Code:
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader in = new BufferedReader
			(new InputStreamReader (System.in));
		
		try {
			TestStub stub = new TestStub();
			TestStub.GetPerson request = new TestStub.GetPerson();
			TestStub.GetPersonResponse resp = null;
			
			String statement = "";
			System.out.println("Eingabe des Statementnamen: ");
			statement= in.readLine();
			request.setStatement(statement);			
			
			String s_id = "";
			System.out.println("Eingabe der Employee_id: ");
			s_id = in.readLine();
			int id = Integer.valueOf(s_id);
			request.setId(id);
			
			resp = stub.getPerson(request);
			
			System.out.println(resp.get_return().getNachname() + "     " + resp.get_return().getVorname() 
					+ "     " + resp.get_return().getGebDatumAsString());
			
			
		} catch (AxisFault e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}


habe auch eine build.xml
 

Niki

Top Contributor
Alles klar, dann weißt du eh was du tust :)
Poste mal den relevanten Code und beschreibe nochmal dein Problem!
 

JavaLearn

Bekanntes Mitglied
Also mein Problem zur Zeit ist es, dass bei der Ausgabe die Spaltennamen noch nicht mithineinbezogen wurden, außerdem würde ich sehr gerne wissen, was wäre wenn ich mehrere Nachnamen, Vornamen, und Geburtsdaten ausgeben will wie etwa so:

Code:
Select last_name, first_name, geb_id from employees Where employee_id Between ? And ?

habe zur Zeit folgendes in meinem Service:
Klasse Test: hier befinden sich zwei Methoden einmal für das setzen einer Id und des weiteren für das setzen von zwei ids ...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
I Allgemeine Herangehensweise bei Übernahme Allgemeine Java-Themen 19
J Erste Schritte Applet allgemeine Funkion Allgemeine Java-Themen 8
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
M allgemeine frage zur plattformunabhängigkeit Allgemeine Java-Themen 2
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
M allgemeine Architekturfrage Allgemeine Java-Themen 4
J Ganz allgemeine Frage Allgemeine Java-Themen 3
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
DonMalte Ambitioniertes Projekt für Einsteiger & Motivierte Allgemeine Java-Themen 0
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
W Alternative für Threads Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
Thallius Rätsel für Windows Profis Allgemeine Java-Themen 8
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben