Sie sind nicht angemeldet.

  • Anmelden

Lieber Besucher, herzlich willkommen bei: Nitrado.net Prepaid Gameserver Community-Support. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 798

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

21

Freitag, 3. Februar 2017, 21:53

#up

BlvckBytes

User / Kunde

  • »BlvckBytes« ist männlich
  • »BlvckBytes« ist der Autor dieses Themas

Beiträge: 798

Wohnort: (*blvckbytes).home

Beruf: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Nachricht senden

22

Montag, 1. Januar 2018, 01:33

!! Huge Correction !!

Krass dass das je funktioniert hat... Eigentlich hätte das gar nichts bringen dürfen. Ich habe mich jetzt, wegen einem Projekt, mal etwas genauer damit beschäftigt und mich auch komplett durch den Code gelesen, welcher in der YamlConfiguration Klasse enthalten ist. Dann habe ich mal einfach Spaßeshalber (da es halt eben nicht funktioniert hat) this.saveToString() ausgeben lassen. Diese Methode soll die YAML die dann geschrieben wird als String ausgeben. Und genau dort waren bereits alle Sonderzeichenfehler enthalten! Und dann habe ich eben bemerkt, dass in der Methode bei #setAllowUnicode so ein komischer Wert als Parameter angegeben ist, welcher, wenn ich ihn ausgebe, FALSE ist. Und genau das ist das Problem. Also habe ich mich per Reflect dort reingeklinkt und den Wert einfach überschrieben, bzw die ganze Methode überschrieben, und nun klappt alles einwandfrei.

Hier einmal der Code, welchen ich hinzugefügt habe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Override
public String saveToString() {
	try {

		Field fy = ReflectUtil.getFieldU( getClass(), "yamlOptions" );
		Field fr = ReflectUtil.getFieldU( getClass(), "yamlRepresenter" );
		Field fYaml = ReflectUtil.getFieldU( getClass(), "yaml" );

		ReflectUtil.makeAccessible( fy );
		ReflectUtil.makeAccessible( fr );
		ReflectUtil.makeAccessible( fYaml );

		DumperOptions yamlOptions = ( DumperOptions ) fy.get( this );
		Representer yamlRepresenter = ( Representer ) fr.get( this );
		Yaml yaml = ( Yaml ) fYaml.get( this );

		yamlOptions.setIndent( this.options().indent() );
		yamlOptions.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
		yamlOptions.setAllowUnicode( true ); // <-- This fixed it all
		yamlRepresenter.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );

		String header = this.buildHeader();
		String dump = yaml.dump( this.getValues( false ) );
		if (dump.equals("{}\n")) {
			dump = "";
		}

		return header + dump;
	} catch( Exception ex ) {
		ex.printStackTrace();
	}
	return "Error";
}



Ich habe dafür auch die ein oder andere Methode aus meinem ReflectUtil benutzt, welche ich ebenfalls erst heute geschrieben habe. Es ist nämlich gar nicht so einfach, das Feld aus der Klasse zu bekommen, von der man erbt (naja ist es schon, aber man muss einmal draufkommen, dass das Feld nicht einfach in der Unterklasse enthalten ist...). Also hier die Methoden dafür (Auszüge aus der Klasse Reflect-Util):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void makeAccessible( Field f ) {
        try {
            f.setAccessible( true );
            if( Modifier.isFinal( f.getModifiers() ) ) {
                ReflectUtil.modifiers.set( f, f.getModifiers() & ~Modifier.FINAL );
            }
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
    }

public static Field getFieldU( Class< ? > clazz, String name ) {
        Field f = null;

        do {
            try {
                f = clazz.getDeclaredField( name );
                break;
            } catch( Exception ex ) {}
        } while( ( clazz = clazz.getSuperclass() ) != null );

        return f;
    }


Ich möchte auf jeden Fall den ganzen Code noch einmal aufräumen und vor allem das ganze ReflectUtil neu strukturieren, da es dort zugeht wie auf einem Schlachtfeld...
Sobald ich diese Änderungen gemacht habe (kann etwas dauern, bin faul :P) werde ich sie hier veröffentlichen, insofern ich es nicht vergesse.

Hoffentlich konnte ich damit dem ein oder anderen helfen und euch davor bewahren, Stundenlang hilflos zu dem Problem zu sitzen, wie es bei mir Anfangs war, xD.

LG BlvckBytes

AirTriX

User / Kunde

Beiträge: 1

  • Nachricht senden

23

Freitag, 28. September 2018, 12:57

Omg, die Rettung :o

Danke dafür, dass erspart so einiges an Arbeit ^^