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.

Reply via email to