You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

21

Friday, February 3rd 2017, 9:53pm

#up

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

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

  • Send private message

22

Monday, January 1st 2018, 1:33am

!! 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:

Source code

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):

Source code

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

Posts: 1

  • Send private message

23

Friday, September 28th 2018, 12:57pm

Omg, die Rettung :o

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

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net