错误500不支持的内容类型:text / html; charset = UTF-8支持的是:[text / xml]

时间:2013-08-01 19:19:19

标签: web-services google-app-engine http-post

我是GoogleAppEngine的新用户并创建了我的第一个应用程序。在尝试使用WebServices时,我遇到了这个问题“错误500不支持的内容类型:text / html; charset = UTF-8支持的是:[text / xml]”

我正在尝试我尝试的代码和更改。

服务器端的方法是:

 @Override
      public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
          System.out.println("STARTED!!!!");
        try {
          // Get all the headers from the HTTP request
          MimeHeaders headers = getHeaders(req);

          // Construct a SOAPMessage from the XML in the request body
          InputStream is = req.getInputStream();
          SOAPMessage soapRequest = messageFactory.createMessage(headers, is);

          // Handle soapReqest
          SOAPMessage soapResponse = soapHandler.handleSOAPRequest(soapRequest);
          System.out.println("YES!!!");
          // Write to HttpServeltResponse
          resp.setStatus(HttpServletResponse.SC_OK);
          resp.setContentType("text/xml;charset=\"utf-8\"");
          OutputStream os = resp.getOutputStream();
          soapResponse.writeTo(os);
          os.flush();
          System.out.println("DONE!!");
        } catch (SOAPException e) {
          throw new IOException("Exception while creating SOAP message.", e);
        }
      }

客户来电如下:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        EntityAPI entityAPI = new EntityAPIService().getEntityAPIPort();

        resp.setContentType("application/json; charset=utf-8");

        resp.getWriter().println("Hello, world");

        String searchFor = req.getParameter("q");
        PrintWriter out = resp.getWriter();

        if (searchFor == null || searchFor.equals("") || searchFor == "*"){
            String str = entityAPI.getAllItem("Politician");
            out.print(str);
        } else
            out.print("Could not get it");
    }

我尝试将@BindingType("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/") 放在客户端类上,同时尝试将请求类型更改为客户端的“text / xml”。

我得到的例外是:

com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/html Supported ones are: [text/xml]
at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:284)
at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:118)
at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:278)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:180)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at com.sun.proxy.$Proxy36.getAllItem(Unknown Source)
at com.projectdemocracy.ProjectdemocracyServlet.doGet(ProjectdemocracyServlet.java:30)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

'getAllItem'是在服务中定义的API。生成的getAllItem(使用wsimport)如下:

/**
 * <p>Java class for getAllItem complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="getAllItem">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getAllItem", propOrder = {
    "arg0"
})
public class GetAllItem {

    protected String arg0;

    /**
     * Gets the value of the arg0 property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getArg0() {
        return arg0;
    }

    /**
     * Sets the value of the arg0 property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setArg0(String value) {
        this.arg0 = value;
    }

}

WSDL是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
<definitions targetNamespace="http://database.projectdemocracy.com/" name="EntityAPIService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:tns="http://database.projectdemocracy.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <types>
    <xsd:schema>
      <xsd:import namespace="http://database.projectdemocracy.com/" schemaLocation="EntityAPIService_schema1.xsd"/>
    </xsd:schema>
  </types>
  <message name="getAllItem">
    <part name="parameters" element="tns:getAllItem"/>
  </message>
  <message name="getAllItemResponse">
    <part name="parameters" element="tns:getAllItemResponse"/>
  </message>
  <portType name="EntityAPI">
    <operation name="getAllItem">
      <input wsam:Action="http://database.projectdemocracy.com/EntityAPI/getAllItemRequest" message="tns:getAllItem"/>
      <output wsam:Action="http://database.projectdemocracy.com/EntityAPI/getAllItemResponse" message="tns:getAllItemResponse"/>
    </operation>
  </portType>
  <binding name="EntityAPIPortBinding" type="tns:EntityAPI">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getAllItem">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="EntityAPIService">
    <port name="EntityAPIPort" binding="tns:EntityAPIPortBinding">
      <soap:address location="http://localhost:8888"/>
    </port>
  </service>
</definitions>

我怎样才能更改正在传递的标题?

如果需要其他任何内容,请与我们联系。任何帮助,将不胜感激。

0 个答案:

没有答案