You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "chris snow (JIRA)" <ji...@apache.org> on 2009/12/28 21:23:29 UTC

[jira] Commented: (OFBIZ-3385) Axis2 integration returns "Unsupported Content-Type: text/html;charset=utf-8 Supported ones are: [text/xml]"

    [ https://issues.apache.org/jira/browse/OFBIZ-3385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12794915#action_12794915 ] 

chris snow commented on OFBIZ-3385:
-----------------------------------

I modified the SOAPEventHandler sendError method to set the content type to text/xml:


{code}
public class SOAPEventHandler implements EventHandler {
...
   private void sendError(HttpServletResponse res, String errorMessage) throws EventHandlerException {
        try {            
            // setup the response
            res.setContentType("text/xml");
...
{code}

This has resolved the content type error message, but I now get the following error message:

{code}
javax.xml.ws.WebServiceException: Unexpected response element Response expected: {http://ofbiz.apache.org/service/}findPartiesByIdResponse
        at com.sun.xml.internal.ws.client.sei.ResponseBuilder$RpcLit.readResponse(ResponseBuilder.java:603)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:110)
        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 $Proxy28.findPartiesById(Unknown Source)
        at javaapplication7.Main.main(Main.java:74)
{code}

It seems that the service is expecting the login.username and login.password parameters, but because of the namespace issue isn't detecting them from the request.  Instead of returning the error in a <findPartiesByIdResponse> element, the service is returning the error in a generic <Response> element.

{code}
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
<Response>
<map-Map>
        <map-Entry>
            <map-Key>
                <std-String value="errorMessage"></std-String>
            </map-Key>
            <map-Value>
                <std-String value="Problem processing the service"></std-String>
            </map-Value>
        </map-Entry>
    </map-Map>
</Response>
</soapenv:Body>
</soapenv:Envelope>

{code}

> Axis2 integration returns "Unsupported Content-Type: text/html;charset=utf-8 Supported ones are: [text/xml]"
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: OFBIZ-3385
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-3385
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: chris snow
>
> I have setup the findPartiesById service to export="true" and tried to call the web service using Netbeans 6.5.
> I received the following error message:
> {code}
> com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/html;charset=utf-8 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 $Proxy28.findPartiesById(Unknown Source)
>         at javaapplication7.Main.main(Main.java:74)
> {code}
> Watching the tcp steam with wireshark, I can see that the prefix ns2 is added to the map-Entry items:
> {code}
> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
>    <S:Body>
>       <ns2:findPartiesById xmlns:ns2="http://ofbiz.apache.org/service/">
>          <map-Map>
>             <ns2:map-Entry>
>                <ns2:map-Key>
>                   <ns2:std-String value="idToFind"/>
>                </ns2:map-Key>
>                <ns2:map-Value>
>                   <ns2:std-String value="admin"/>
>                </ns2:map-Value>
>             </ns2:map-Entry>
>             <ns2:map-Entry>
>                <ns2:map-Key>
>                   <ns2:std-String value="login.username"/>
>                </ns2:map-Key>
>                <ns2:map-Value>
>                   <ns2:std-String value="admin"/>
>                </ns2:map-Value>
>             </ns2:map-Entry>
>             <ns2:map-Entry>
>                <ns2:map-Key>
>                   <ns2:std-String value="login.password"/>
>                </ns2:map-Key>
>                <ns2:map-Value>
>                   <ns2:std-String value="ofbiz"/>
>                </ns2:map-Value>
>             </ns2:map-Entry>
>          </map-Map>
>       </ns2:findPartiesById>
>    </S:Body>
> </S:Envelope>
> {code}
> If I copy this soap message and paste into SoapUI, the soap call fails.  However, if I strip off the ns2 prefix from the map-Entry items (as below), the call succeeds:
> {code}
> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
>    <S:Body>
>       <ns2:findPartiesById xmlns:ns2="http://ofbiz.apache.org/service/">
>          <map-Map>
>             <map-Entry>
>                <map-Key>
>                   <std-String value="idToFind"/>
>                </map-Key>
>                <map-Value>
>                   <std-String value="admin"/>
>                </map-Value>
>             </map-Entry>
>             <map-Entry>
>                <map-Key>
>                   <std-String value="login.username"/>
>                </map-Key>
>                <map-Value>
>                   <std-String value="admin"/>
>                </map-Value>
>             </map-Entry>
>             <map-Entry>
>                <map-Key>
>                   <std-String value="login.password"/>
>                </map-Key>
>                <map-Value>
>                   <std-String value="ofbiz"/>
>                </map-Value>
>             </map-Entry>
>          </map-Map>
>       </ns2:findPartiesById>
>    </S:Body>
> </S:Envelope>
> {code}
> My java class is:
> {code}
> package javaapplication7;
> import org.apache.ofbiz.service.MapEntry;
> import org.apache.ofbiz.service.MapKey;
> import org.apache.ofbiz.service.MapMap;
> import org.apache.ofbiz.service.MapValue;
> import org.apache.ofbiz.service.StdString;
> public class Main {
>     public static void main(String[] args) {
>         try { 
>             org.apache.ofbiz.service.FindPartiesById service = new org.apache.ofbiz.service.FindPartiesById();
>             org.apache.ofbiz.service.FindPartiesByIdPortType port = service.getFindPartiesByIdPort();
>             StdString keyString = new StdString();
>             keyString.setValue("idToFind");
>             MapKey mapKey = new MapKey();
>             mapKey.setStdString(keyString);
>             
>             StdString valueString = new StdString();
>             valueString.setValue("admin");            
>             
>             MapValue mapValue = new MapValue();
>             mapValue.setStdString(valueString);
>             MapEntry mapEntry = new MapEntry();
>             mapEntry.setMapKey(mapKey);
>             mapEntry.setMapValue(mapValue);
>             StdString keyStringLogin = new StdString();
>             keyStringLogin.setValue("login.username");
>             MapKey mapKeyLogin = new MapKey();
>             mapKeyLogin.setStdString(keyStringLogin);
>             StdString valueStringLogin = new StdString();
>             valueStringLogin.setValue("admin");
>             MapValue mapValueLogin = new MapValue();
>             mapValueLogin.setStdString(valueStringLogin);
>             MapEntry mapEntryLogin = new MapEntry();
>             mapEntryLogin.setMapKey(mapKeyLogin);
>             mapEntryLogin.setMapValue(mapValueLogin);
>             StdString keyStringPassword = new StdString();
>             keyStringPassword.setValue("login.password");
>             MapKey mapKeyPassword = new MapKey();
>             mapKeyPassword.setStdString(keyStringPassword);
>             StdString valueStringPassword = new StdString();
>             valueStringPassword.setValue("ofbiz");
>             MapValue mapValuePassword = new MapValue();
>             mapValuePassword.setStdString(valueStringPassword);
>             MapEntry mapEntryPassword = new MapEntry();
>             mapEntryPassword.setMapKey(mapKeyPassword);
>             mapEntryPassword.setMapValue(mapValuePassword);
>             MapMap myMap = new MapMap();
>             myMap.getMapEntry().add(mapEntry);
>             myMap.getMapEntry().add(mapEntryLogin);
>             myMap.getMapEntry().add(mapEntryPassword);
>             javax.xml.ws.Holder<org.apache.ofbiz.service.MapMap> mapMap = 
>                     new javax.xml.ws.Holder<org.apache.ofbiz.service.MapMap>(myMap);
>             port.findPartiesById(mapMap);
>         } catch (Exception ex) {
>             ex.printStackTrace();
>         }
>     }
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.