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.