Keine Inhalte geben - JAX-RS
Wenn ein client eine Verbindung zu einem web service (JAX-RS) wie folgt:
URL u = new URL(server);
URLConnection con = u.openConnection();
con.setDoOutput(true);
con.getOutputStream().write(stream.toByteArray()); //ByteArrayOutputStream
con.connect();
InputStream inputStream = con.getInputStream();
byte [] urlBytes = new byte [inputStream.available()];
inputStream.read(urlBytes);
url = new String(urlBytes);
Dann was sein sollte, die web-service-interface-definition? Ich habe:
@POST
@Path("/upload")
@Consumes("image/jpeg")
@Produces(MediaType.TEXT_PLAIN)
String uploadPicture();
Jedoch, wenn der Zugriff durch den client wirft:
[FEHLER] INFO: generating jax-rs-proxy-loader-Klasse. [INFO] DEBUG
[SynchronousDispatcher] PathInfo: /blob/upload [INFO] WARNEN
[ExceptionHandler] Fehler beim ausführen POST /blob/upload [INFO]
org.jboss.resteasy.spi.UnsupportedMediaTypeException: Nicht konsumieren können
content-type [INFO]
org.jboss.resteasy.core.Registrierung.Segment.match(Segment.java:117)
[INFO]
org.jboss.resteasy.core.Registrierung.SimpleSegment.matchSimple(SimpleSegment.java:33)
[INFO]
org.jboss.resteasy.core.Registrierung.RootSegment.matchChildren(RootSegment.java:327)
[INFO]
org.jboss.resteasy.core.Registrierung.SimpleSegment.matchSimple(SimpleSegment.java:44)
[INFO]
org.jboss.resteasy.core.Registrierung.RootSegment.matchChildren(RootSegment.java:327)
[INFO]
org.jboss.resteasy.core.Registrierung.RootSegment.matchRoot(RootSegment.java:374)
[INFO]
org.jboss.resteasy.core.Registrierung.RootSegment.matchRoot(RootSegment.java:367)
[INFO]
org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:354)
[INFO]
org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:231)
[INFO]
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:170)
[INFO]
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
[INFO]
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
[INFO]
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
[INFO]
javax.- servlet.http.HttpServlet.service(HttpServlet.java:717) [INFO]
bei
org.mortbay.jetty.- servlet.ServletHolder.Griff(ServletHolder.java:511)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[INFO]
com.google.injizieren.- servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66)
[INFO]
com.googlecode.objektivieren.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:39)
[INFO]
com.google.injizieren.- servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
[INFO]
com.google.injizieren.- servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
[INFO]
org.apache.shiro.web.- servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
[INFO]
org.apache.shiro.web.- servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
[INFO]
org.apache.shiro.Thema.Unterstützung.SubjectCallable.doCall(SubjectCallable.java:90)
[INFO]
org.apache.shiro.Thema.Unterstützung.SubjectCallable.call(SubjectCallable.java:83)
[INFO]
org.apache.shiro.Thema.Unterstützung.DelegatingSubject.execute(DelegatingSubject.java:383)
[INFO]
org.apache.shiro.web.- servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
[INFO]
org.apache.shiro.web.- servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
[INFO]
com.google.injizieren.- servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
[INFO]
com.google.injizieren.- servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
[INFO]
com.google.injizieren.- servlet.ManagedFilterPipeline.Versand(ManagedFilterPipeline.java:118)
[INFO]
com.google.injizieren.- servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.tools.Entwicklung.StaticFileFilter.doFilter(StaticFileFilter.java:125)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369)
[INFO]
com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352)
[INFO]
com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]
org.mortbay.jetty.- servlet.ServletHandler.Griff(ServletHandler.java:388)
[INFO]
org.mortbay.jetty.Sicherheit.SecurityHandler.Griff(SecurityHandler.java:216)
[INFO]
org.mortbay.jetty.- servlet.SessionHandler.Griff(SessionHandler.java:182)
[INFO]
org.mortbay.jetty.handler.ContextHandler.Griff(ContextHandler.java:765)
[INFO]
org.mortbay.jetty.webapp.WebAppContext.Griff(WebAppContext.java:418)
[INFO]
com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
[INFO]
org.mortbay.jetty.handler.HandlerWrapper.Griff(HandlerWrapper.java:152)
[INFO]
com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:438)
[INFO]
org.mortbay.jetty.handler.HandlerWrapper.Griff(HandlerWrapper.java:152)
[INFO] org.mortbay.jetty.Server.Griff(auf dem Server.java:326) [INFO]
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[INFO]
org.mortbay.jetty.HttpConnection$RequestHandler.Inhalt(HttpConnection.java:938)
[INFO] org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
[INFO]
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[INFO]
org.mortbay.jetty.HttpConnection.Griff(HttpConnection.java:404)
[INFO]
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[INFO]
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Was sollte die JAX-RS-interface für den client?
Update:
Eine Sache hier zu beachten ist, dass der client-code ist bereits zusammengestellt und unterschrieben, und ich kann nicht einfach ändern.
InformationsquelleAutor xkm | 2013-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schade, dass Sie nicht ändern können, den client... der Fehler gehört:
nicht die entsprechenden
Content-Type
, so wird die Verbindung standardmäßigapplication/x-www-form-urlencoded
dann sendet er die Bilddaten als einen einfachen stream (es ist also nicht richtig codiert)
Die kürzeste (hart, nicht so eleganten) Weg zu einer tragfähigen Lösung könnte sein, alles akzeptieren:
InformationsquelleAutor Carlo Pellegrini