# Push Web Service: Invalid UTF-8 start byte



## Maven (30. Sep 2013)

Hallo zusamen,

ich bin dabei einen Push Web Service bereitzustellen, der von einem anderen Web Service dann aufgerufen wird und die Daten dann an meinen Web Service gepushed werden. Den Web Service habe ich mithilfe einer WSDL-Datei erstellt und dann mit NetBeans 7.3.1 generieren lassen (Web Service from WSDL). Dem Web Service der meinen Web Service ansprechen soll, habe ich meine URL übergeben. Allerdings bekomme ich Fehlermeldungen:


```
Couldn't create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxParsingException: Invalid UTF-8 start byte 0x8b (at char #2, byte #-1)
Caused by: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0x8b (at char #2, byte #-1)
```

Dann habe ich generell mit dem Web Service herumgespielt und den Binding Type verändert. Füge ich folgende Annotation ein:

```
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
```

bekomme ich folgende Fehlermeldung:

```
Unsupported Content-Type: text/html Supported ones are: [application/soap+xml]
```

Daraus schließe ich, dass das verwendete SOAP Protokoll in der Version 1.1 verwendet wird (also SOAP11HTTP_BINDING).

Der nächste Schritt ist alles zu überprüfen was mit UTF-8 Codierung zusammenhängt. Es wird ein Glassfish 3.1.2.2 verwendet. Also habe ich die JVM-Options geändert:

```
-Dfile.encoding=UTF-8
-DuriEncoding=UTF-8
```
oder

```
-Dfile.encoding=UTF8
-DuriEncoding=UTF8
```

Brachte allerdings auch keinen Erfolg. Dann habe ich mit der sun-web.xml experimentiert:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <parameter-encoding default-charset="UTF-8"/>
  <locale-charset-info default-locale="UTF-8">
    <locale-charset-map charset="" locale=""/>
    <parameter-encoding default-charset="UTF-8"/>
  </locale-charset-info>
</sun-web-app>[/XML]

Ebenfalls keine Veränderung. Die *pom.xml* sieht wie folgt aus:
[XML]...
       <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>PushService.wsdl</wsdlFile>
                            </wsdlFiles>
                            <staleFile>${project.build.directory}/jaxws/stale/PushService.stale</staleFile>
                        </configuration>
                        <id>wsimport-generate-PushService</id>
                        <phase>generate-sources</phase>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>javax.xml</groupId>
                        <artifactId>webservices-api</artifactId>
                        <version>1.4</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
                    <xnocompile>true</xnocompile>
                    <verbose>true</verbose>
                    <extension>true</extension>
                    <catalog>${basedir}/src/jax-ws-catalog.xml</catalog>
                </configuration>
            </plugin>
...[/XML]

Komischerweise klappt alles beim Client Pull. Vorgabe ist allerdings das Push Verfahren. Ich habe auch schon gelesen, dass manche einen "Filter" verwendet haben als Workaround/ Hack. Allerdings scheint es, dass ich erst einmal programmatisch keinen Einfluss darauf habe. Ich habe überall einen Logger gesetzt und nie wird einer ausgelöst, die Fehlermeldung scheint vor allem anderen zu kommen. Vermutung war auch schon, dass das BOM (Byte Order Mark) Probleme bereiten könnte. Selbst mit dem Wissensgewinn, dass es Probleme mit dem BOM gibt, wüsste ich immer noch keine Einflussnahme.

Ich danke schon einmal für eure Hilfe
Maven


----------



## Maven (1. Okt 2013)

*Update:* (kann den Post nicht mehr editieren):
Ich habe jetzt mal einen Servlet davorgeschaltet und hab mir gemeinsam mit einem Kollegen den Byte-Stream angeschaut, hat sich dann letztendlich herausgestellt, dass er komprimiert ist. Evt. weiß jemand wie man GZIP-Dekromprimierung bei einem Web Service aktiviert.


----------



## Maven (7. Okt 2013)

Also anscheinend unterstützt Glassfish die gzip-Dekodierung nicht, deswegen haben wir jetzt einen Servlet-Filter davorgeschaltet:


```
@WebFilter(filterName = "GZipInputFilter", urlPatterns = {"/*"})
public class GZipInputFilter implements Filter
```


----------

