Erro com SXtream

2 respostas Resolvido
AndreNF

Tenho o seguinte código, que estou trabalhando no NETBEANS, aparentemente não está nada errado, porém não roda. O erro, depurando, está na linha do XStream:

@Override
public void start(Stage stage) throws Exception {
    
//        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
//        
//        Scene scene = new Scene(root);
//
//        stage.setScene(scene);
//        stage.show();
    
    gravaEndereco();
//        gravaListaEndereco();
//        gravaListaCompleta();
//        
//        lerXML();

}

private static void gravaEndereco() {

Endereco endereco = new Endereco();
    endereco.setCidade("Primavera do Leste");
    endereco.setRua("Rua das araras");

    **XStream xStream = new XStream();**
    xStream.alias("endereco", Endereco.class);

    File arquivo = new File("endereco.xml");
    FileOutputStream gravar;
    try {
        gravar = new FileOutputStream(arquivo);
        gravar.write(xStream.toXML(endereco).getBytes());
        gravar.close();
    } catch (IOException ex) {
        //ex.printStackTrace();
    }
    
}

Eu tenho a classe, o e também os arquivos xstream-1.4.9.redhat-2.jar e dom4j-1.6.1.jar. Aparece o seguinte erro, que para mim é ilegível:

ant -f C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3 jfxsa-run

init:

Deleting: C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\build\built-jar.properties

deps-jar:

Updating property file: C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\build\built-jar.properties

Compiling 1 source file to C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\build\classes

Note: C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\src\javafxapplication3\JavaFXApplication3.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

compile:

Deleting directory C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\dist\lib

Copying 2 files to C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\dist\lib

Detected JavaFX Ant API version 1.3

Launching <a>fx:jar</a> task from C:\Program Files\Java\jdk1.8.0_111\jre…\lib\ant-javafx.jar

Warning: From JDK7u25 the Codebase manifest attribute should be used to restrict JAR repurposing.

Please set manifest.custom.codebase property to override the current default non-secure value ‘*’.

Launching <a>fx:deploy</a> task from C:\Program Files\Java\jdk1.8.0_111\jre…\lib\ant-javafx.jar

No base JDK. Package will use system JRE.

No base JDK. Package will use system JRE.

jfx-deployment-script:

jfx-deployment:

jar:

Copying 14 files to C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\dist\run221792884

jfx-project-run:

Executing C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\dist\run221792884\JavaFXApplication3.jar using platform C:\Program Files\Java\jdk1.8.0_111\jre/bin/java

Exception in Application start method

java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)

at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)

Caused by: java.lang.RuntimeException: Exception in Application start method

at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)

at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException

at com.thoughtworks.xstream.XStream.(XStream.java:350)

at javafxapplication3.JavaFXApplication3.gravaEndereco(JavaFXApplication3.java:63)

at javafxapplication3.JavaFXApplication3.start(JavaFXApplication3.java:41)

at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)

at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)

at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)

at java.security.AccessController.doPrivileged(Native Method)

at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)

at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)

at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)

… 1 more

Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

… 12 more

Exception running application javafxapplication3.JavaFXApplication3

Java Result: 1

Deleting directory C:\Users\André\Documents\NetBeansProjects\JavaFXApplication3\dist\run221792884

jfxsa-run:

CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Estou dois dias empacado aqui. Se alguém puder ajudar agradeço.

2 Respostas

jacoboliveira

Olá @AndreNF, seu código esta normal pode algumas dependências que esteja faltando veja:

Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException

Meu pom.xml para você se guiar nas dependências

`<dependencies>
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.9</version>
    </dependency>        
    <dependency>
        <groupId>xmlpull</groupId>
        <artifactId>xmlpull</artifactId>
        <version>1.1.3.1</version>
    </dependency>
    <dependency>
        <groupId>xpp3</groupId>
        <artifactId>xpp3_min</artifactId>
        <version>1.1.4c</version>
    </dependency>
</dependencies>

`

No código abaixo fiz só algumas alterações para gerar o XML corretamente

` Endereco endereco = new Endereco();
    endereco.setCidade("Primavera do Leste");
    endereco.setRua("Rua das araras");
    XStream xStream = new XStream() {
        @Override
        protected MapperWrapper wrapMapper(MapperWrapper next) {
            return new MapperWrapper(next) {
                @Override
                @SuppressWarnings("rawtypes")
                public boolean shouldSerializeMember(Class definedIn, String fieldName) {

                    if (fieldName.indexOf("this$") != -1) {
                        return false;
                    }
                    System.out.println(definedIn);
                    return super.shouldSerializeMember(definedIn, fieldName);
                }
            };
        }
    };
    xStream.alias("endereco", Endereco.class);

    File arquivo = new File("C:\\endereco.xml");

    try (FileOutputStream gravar = new FileOutputStream(arquivo)) {

        gravar.write(xStream.toXML(endereco).getBytes());
    } catch (IOException ex) {
        Logger.getLogger(TestXStream.class.getName()).log(Level.SEVERE, null, ex);
    }

`

Observações :

Alterações feitas:

  • Eliminação da tag
  • inclusao do path correto para geração
  • ajuste no try catch
AndreNF
Solucao aceita

Agradeço a resposta. Eu estava observando um código mais a frente e verifiquei que havia a declaração de um drive. Eu fiz parecido e deu certo:

XStream xStream = new XStream(new Dom4JDriver());

Mas a questão é: Isso está correto? O que diabos eu fiz.

O bom é que deu certo! rsrsrs

Criado 9 de novembro de 2016
Ultima resposta 9 de nov. de 2016
Respostas 2
Participantes 2