Creating a custom serializer for SOAP

Hi guys, i'm wondering if someone could help me. I'm trying to create a custom serializer for a class with SOAP and I'm geeting the following SOAPException:
Fault Code = SOAP-ENV:Server.Exception:
Fault String = org/apache/soap/util/xml/Serializer
I'm able to deploy the service with no problems.
I'm using a very simple example in which I'm only trying to get a Person class from the service. here is the deployment descriptor:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:PersonService">
  <isd:provider type="java"
                scope="Application"
                methods="getPerson">
    <isd:java class="app.PersonService" static="false"/>
  </isd:provider>
  <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
  <isd:mappings>
    <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:x="urn:person"
             qname="x:person"
             javaType="app.Person"
             java2XMLClassName="app.PersonSerializer"
             xml2JavaClassName="app.PersonSerializer"/>
  </isd:mappings> 
</isd:service>here is the PersonService.java:
package app;
public class PersonService {
    /** Creates a new instance of GetPerson */
    public PersonService() {
    public Person getPerson() {
        return new Person("joe", "something");
}here is the Person.java:
package app;
public class Person {
    public String firstName;
    public String lastName;
    /** Creates a new instance of Person */
    public Person() {   
    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
}here is the PersonSerializer.java:
package app;
import java.io.IOException;
import java.io.Writer;
import org.apache.soap.encoding.soapenc.SoapEncUtils;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.RPCConstants;
import org.apache.soap.rpc.SOAPContext;
import org.apache.soap.util.Bean;
import org.apache.soap.util.StringUtils;
import org.apache.soap.util.xml.DOMUtils;
import org.apache.soap.util.xml.Deserializer;
import org.apache.soap.util.xml.NSStack;
import org.apache.soap.util.xml.QName;
import org.apache.soap.util.xml.Serializer;
import org.apache.soap.util.xml.XMLJavaMappingRegistry;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class PersonSerializer implements Serializer, Deserializer {
    /** Creates a new instance of PersonSerializer */
    public PersonSerializer() {
    public void marshall(String string, Class aClass, Object object, Object object0, Writer writer, NSStack nSStack, XMLJavaMappingRegistry xMLJavaMappingRegistry, SOAPContext sOAPContext) throws IllegalArgumentException, IOException {
        nSStack.pushScope();
        SoapEncUtils.generateStructureHeader(string, aClass, sOAPContext, writer, nSStack, xMLJavaMappingRegistry);
        writer.write(StringUtils.lineSeparator);
        Person person = (Person)object;
        String firstName = person.firstName;
        String lastName = person.lastName;
        xMLJavaMappingRegistry.marshall(string, String.class, firstName, "firstName", writer, nSStack, sOAPContext);
        writer.write(StringUtils.lineSeparator);
        xMLJavaMappingRegistry.marshall(string, Integer.class, lastName, "lastName", writer, nSStack, sOAPContext);
        writer.write(StringUtils.lineSeparator);
        writer.write("</" + sOAPContext + '>');   
        nSStack.popScope();
    public Bean unmarshall(String string, QName qName, Node node, XMLJavaMappingRegistry xMLJavaMappingRegistry, SOAPContext sOAPContext) throws IllegalArgumentException {
        Element root = (Element)node;
        Element childElement = DOMUtils.getFirstChildElement(root);
        Person target;
        try {
            target = (Person)Person.class.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Problem instantiating bean: " + e.getMessage());
        while(childElement !=null) {
            Bean paramBean = xMLJavaMappingRegistry.unmarshall(string, RPCConstants.Q_ELEM_PARAMETER, childElement, sOAPContext);
            Parameter param = (Parameter)paramBean.value;
            String tagName = childElement.getTagName();
            if(tagName.equals("firstName")) {
                target.firstName = (String)param.getValue();
            } else if(tagName.equals("lastName")) {
                target.lastName = (String)param.getValue();
            childElement = DOMUtils.getNextSiblingElement(childElement);
        return new Bean(Person.class, target);
}and finally here is the client app class that calls the service, the GetPersonClient.java:
package app;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.util.xml.QName;
public class GetPersonClient {
    /** Creates a new instance of GetPersonClient */
    public GetPersonClient() {
    public static void main(String[] args) {
        SOAPMappingRegistry registry = new SOAPMappingRegistry();
        PersonSerializer personSerializer = new PersonSerializer();
        // Map the types.
        registry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("urn:person", "person"), Person.class, personSerializer, personSerializer);
// Build the call.
        Call call = new Call();
        call.setSOAPMappingRegistry(registry);
        call.setTargetObjectURI("urn:PersonService");
        call.setMethodName("getPerson");
        call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
        Response response;
        try {
           response = call.invoke(new URL("http://localhost:8090/soap/servlet/rpcrouter"), "");
        } catch (SOAPException e) {
            System.err.println("Caught SOAPException: " + e.getMessage());
            e.printStackTrace();
            return;
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
            return;
        if (!response.generatedFault()) {
            Parameter parameter = response.getReturnValue();
            Person person = (Person)parameter.getValue();
            if ( person != null ) {
                System.out.println( person.firstName + " " + person.lastName );
        } else {
            Fault fault = response.getFault();
            System.err.println("Generated fault: ");
            System.out.println("  Fault Code   = " + fault.getFaultCode());
            System.out.println("  Fault String = " + fault.getFaultString());
}if someone could help me i would be grateful.
cheers
nmc

Is the problem in your 'marshall' method? You seem to be using Integer.class instead of String.class for the 'lastName' parameter...

Similar Messages

  • How to create a custom measure for each level of a dimension

    Hi all!
    Can Anyone please explain me with an example, how to create a custom measure for each level for a dimension? I dont mine if you use
    one or more measures.
    thanks in advance
    hope someone helps me.

    For example:I create a dimension for product_dim witch has 4 levels:total, class, family and item:
    d_aben18
    n1_aben18
    n2_aben18
    n3_aben18
    n4_aben18
    herarchy:h_aben18
    cube:cubo_aben18
    measure:med_aben18
    I create this code to fetch the data to the dimension:
    TRAP ON CLEANUP
    SQL DECLARE c1 CURSOR FOR SELECT-
    total_product_id,1,'N1_ABEN18',total_product_dsc,-
    class_id,1,'N2_ABEN18',total_product_id,class_dsc,-
    family_id,1,'N3_ABEN18', class_id, family_dsc,-
    item_id,1,'N4_ABEN18',family_id,item_dsc-
    FROM PRODUCT_DIM
    "OPEN THE CURSOR
    SQL OPEN c1
    "FETCH THE DATA
    SQL FETCH c1 LOOP INTO-
    :APPEND D_ABEN18, :D_ABEN18_H_aben18_HIERDEF,:D_ABEN18_N1_aben18_LEVELDEF,:D_ABEN18_long_description,-
    :APPEND D_ABEN18, :D_ABEN18_H_aben18_HIERDEF,:D_ABEN18_N2_aben18_LEVELDEF,:D_ABEN18_parentrel,-
    :D_ABEN18_long_description,-
    :APPEND D_ABEN18, :D_ABEN18_H_aben18_HIERDEF,:D_ABEN18_N3_aben18_LEVELDEF,:D_ABEN18_parentrel,-
    :D_ABEN18_long_description,-
    :APPEND D_ABEN18, :D_ABEN18_H_aben18_HIERDEF,:D_ABEN18_N4_aben18_LEVELDEF,:D_ABEN18_parentrel,-
    :D_ABEN18_long_description,-
    "SAVE THE CHANGES
    UPDATE
    COMMIT
    CLEANUP:
    SQL CLOSE c1
    SHOW 'KK2'
    Then I create a cube with use compression off, and in rules sum for example.
    After, I create a measure and I select Override the aggregation specification for the cube, in rules I put nonadditive and I would like to create aprogram to assign distinct values to each level of the dimension. For example, I put 1, 2 3, and 4 values, but at the end I would like to put count(distinct(values)).
    for that I create another program:
    VRB D_RETURN DECIMAL
    if D_ABEN18_N1_ABEN18_LEVELDEF eq 'N1_ABEN18'
    then D_RETURN = 1
    if D_ABEN18_N2_ABEN18_LEVELDEF eq 'N2_ABEN18'
    then D_RETURN = 2
    if D_ABEN18_N3_ABEN18_LEVELDEF eq 'N3_ABEN18'
    then D_RETURN = 3
    if D_ABEN18_N4_ABEN18_LEVELDEF eq 'N4_ABEN18'
    then D_RETURN = 4
    else d_return=26
    return d_return
    "SHOW D_RETURN
    cubo_aben18_med_aben18_stored=d_return
    but it doesnt work.I dont know how to put to assign or to see what I want.
    I report the measure, or I report the program, but then how can I see the values of the measure?
    thanks in advance

  • How can I create a custom dock for all users?

    Hello,
    I would like to create a custom dock for everyone that uses a certain Mac. I have found a bunch of stuff, but it is outdated. Most of the tutorials are for 10.4 or 10.5. I am using 10.7.4 and I have found nothing regarding that. Can anyone point me in the right direction?
    Thanks in advance

    Hello,
    I am not sure how I wound-up in the server forum. I am using the desktop version of OS X 10.7.4.
    Thanks

  • How to create a "Custom Color" for highlighting? (Acrobat XI)

    March 10, 2014
    How to create a "Custom Color" for highlighting? (Acrobat XI)
    The numbers in the RGB and other fields change as various numbers are changed.
    I wanted to create a pale orange:
    Hue               13      Red      255
    Saturation   240      Green  177
    Luminosity    86       Blue     140
    I'd selected one of the orange squares in the color grid, to display the general orange area of the slider.
    I moved the slider to select a pale orange, which generated the above numbers.   Since this wasn't directly available to save to a Custom Color, I tried to  edit the numbers.  Unfortunately, the other numbers changed, making it impossible to actually create a color.
    Any suggestions would be appreciated.
    Note:  I used Techsmith's Snagit to show screen shots in a Word document.
    When I attempted to browse and upload the file, the error message said "[The content type of this image is not allowed.]"
    OK...what images *are* allowed?

    Hi Don,
    I saw Gilad answered your question in another forum post.
    Do you have everything you need at this point?
    Let me know if you need further assistance.
    Kind regards, Stacy

  • Possible to create a custom renderer for rendering standard component ?

    This is in context for creating dynamic Data tables. Is it possible to create a custom Renderer for rendering component (standard) without creating a custom component?
    namanc

    Let's assume you want to create a custom renderer which will be used to render the error-messages (the h:messages tag). The component-family in this case is: javax.faces.Messages, the renderer-type javax.faces.Messages.
    Therefor in your application's faces-config.xml add this renderer-statement (inside a render-kit, obviuosly):
    <faces-config>
      <!-- other stuff like components, managed beans, navigation-rules,... -->
      <render-kit>
        <renderer>
          <component-family>javax.faces.Messages</component-family>
          <renderer-type>javax.faces.Messages</renderer-type>
          <renderer-class>my.very.special.MessagesRenderer</renderer-class>
        </renderer>
      </render-kit>
      <!-- other renderers... -->
    </faces-config>The code for MessagesRenderer is very dependent on your needs, therefor I will not post something here. Basically you need to extend javax.faces.render.Renderer. For help in that camp, surf to the online tutorials or get yourself a book (I learned a lot from Kito Mann's "JSF in Action"). Additionally grab the source for Sun's RI AND Myfaces and dig into that java-code. There is a huge learning potential looking at that source-material.
    hth
    Alexander

  • I am getting ready to sell a Mac app and I want to know what the specs are to create a custom background for my Mac App?

    I am getting ready to sell a Mac app and I want to know what the specs are to create a custom background for my Mac App?
    Here is a good example of what I am talking about: https://docs.google.com/file/d/0B28kNqQ8gmifRjRHam9wVnlrWG8/edit?usp=sharing

    You need to post your question in the Apple Developer Forums

  • Create 1 customer master for some small customer

    Hi All,
    Our company have some small customer, sometime they buy our goods (may be they buy only one time). So we want create 1 customer master for them. Can we do it?

    Dear  ngocvt,
    Transaction Code: V-07 - Create a one-time customer. (Account Group - CPDA)
    One time customer / vendor accounts in SAP means they are account groups for customer/vendor and where in only the general data of the customer / vendor are stored instead of maintaining the bank data and other company code data that are relevant for other account groups which are useful for long run purposes.
    As you know everything that is entered in SAP is saved in some TABLE. Now the customer & vendor master is such a table which holds vast amount of data.
    The business secenario where the vendor or customer which are being in system only for 1 transaction, it is not advisable to have all the data maintained in main master.
    Therefore SAP has provided with the feature of One time vendor / customer wherein in the document entry stage only you have to enter the name, address and other details of the vendor/customer.
    The data, as far as I know' remains at doc level and does'nt go to the master tables.
    If you want to change the standard functionality then go to
    Transaction OBD2, u will find CPDA, that is standard one one time customer account group.
    Copy it  and make necessary changes.
    Hope this Helps.
    Thanks
    Murtuza

  • Using Apache Commons HTTPClient to create a custom socket for Java mail

    Does anyone know how to use Apache Commons HTTPClient to create a custom socket for Java mail. This is necessary for me to use NTLM authentication

    JavaMail doesn't use HTTP.
    If you want to add support for NTLM authentication to one of the standard protocols,
    your best bet is to create a SASL provider, although note that only JavaMail's IMAP
    provider uses SASL currently. The other protocols should add SASL support, but that
    hasn't been done yet.

  • Creating a custom scale for current

    Hi guys,
    I need some help with creating a custom scale. I am reading motor current (analog I/P) and would like to display that on a graph and write it to a file. I need to use a linear scaling for custom scale. The slope is 2 and the intercept is 0. I've attache the code to make it clear what I am trying to acomplish. The way I've set it up right now is no scaling. There are 2 tasks in the code. I would like to create a custom scaling for the first task as seen in the attached code. I have done custom scaling using DAQ Assistant Express VI. But I dont see such options when I try to do the same with the DAQmx task. Please let me know how this can be done. Any help is greatly appreciated.
    Thanks,
    Raj 
    Solved!
    Go to Solution.
    Attachments:
    Current_Voltage_RPM-_sub_VI-1.vi ‏18 KB

    You both had me going nuts trying to figure how to get to that property. Basically just right click the DAQmx property node and "Select filter..." . This brings up the "Configure Filter Settings" where I chose 'show all attributes'. I could then get to the AI Custom Scale Name property.
     Interestingly when you use the Property Browser and select the magnifying glass you can get to that property...but you just can't select it if you have the filter set incorrectly. Lesson Learned.
    I also found this community example and that one.  
    Using LabVIEW 2010SP1 and TestStand 4.5

  • How to create a custom variable for a Label?

    i need my label to store a string variable in it, do you know i can create a custom variable for it.
    i mean for example if it's name is "StoredString" i can access it in my code by "label1.StoredString" just like "Label1.text" or something like that.

    Thanks for pvdg42's help.
    Hi soorena12,
    Based on your issue, I suggest you can try the pvdg42's suggestion check your issue in your side.
    If it still could not help you solve this issue, I suggest you can tell me which kind of application you create the label in the VS IDE?
    What language you use to create for your application?
    If you have any update message about your issue, please tell us.
    Best Regards,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Creating a Custom Task for an external application

    Hi
    I want to create a custom task for our records management system, that just opens a particular file people use from within Incident Management every day. 
    The file is of extension .tr5 (which is our records management tool).  I can open the file on my desktop.  When I create the custom task, using the same file - I get a message ' The specified executable is not a valid Win32 application' 
    I can open the application fine using the custom task, but not the file. 
    Could it because there is no relationship from SCSM to the file type? 
    Any suggestions are appreciated. 

    Are you using the executable exe file and the filename as a parameter in the custom task?
    Andreas Baumgarten | H&D International Group

  • I need create a custom control for visualization HTML

    Hi guys,
      I need create a custom control for HTML files visualization on SAPGUI JAVA. I created a sample program and perfectly run on SAPGUI Windows.
    Thanks.
    Regards.
    Jose Antonio Campos.

    Hi,
    Just as a quick start
    http://gumbo.flashhub.net/sizer/  (view source enabled).
    this uses a skin to make a titlewindow resizable, its not about the skin as much as giving you a starting point for resizing code.
    if you look into the skin you will see these functions
    protected function sizer_mouseDownHandler(event:MouseEvent):void
    OldX=event.stageX;
    OldY=event.stageY;
    systemManager.addEventListener(MouseEvent.MOUSE_MOVE,startResize);
    systemManager.addEventListener(MouseEvent.MOUSE_UP,endResize);
    protected function endResize(event:MouseEvent):void
    systemManager.removeEventListener(MouseEvent.MOUSE_MOVE,startResize);
    systemManager.removeEventListener(MouseEvent.MOUSE_UP,endResize);
    private function startResize(event:MouseEvent): void
    hostComponent.width -= OldX-event.stageX;
    hostComponent.height -= OldY-event.stageY;
    OldX=event.stageX;
    OldY=event.stageY;
    The idea is to have a hit area on your custom component (a corner, or all corners). You capture the mouseposition when you mousedown then in the mouse move eventlistener you update the object size with the difference between current X and Y from initial X and Y.
    Hope this gets you started.
    David

  • How to create an custom template for cheque printing layout?

    Hi, I have a question about cheque printing format set up in SAP Business One.
    All the the system standard templates in u201CCheque print lay out designeru201Dare u201Ccheque-stub-stubu201D or u201Cstub-cheque-stubu201D or u201Cstub-stub-chequeu201D (three portions). What I need is u201Ccheque-stubu201D (two portions)only. Anyone knows how to create an custom template?
    Thanks.
    Edited by: Angela Zhang on Jan 17, 2010 7:18 AM
    Edited by: Angela Zhang on Jan 17, 2010 7:18 AM

    Hi Angela,
    Check the thread,
    Re: Preprint AP check - stub/check repetitive area fram size
    CHECK PRINTING
    Re: check/cheque for payment printing posting date on stub
    PLD Check-Stub-Stub
    PLD Check
    PLD Multiple Check printing
    Regards,
    Madhan.

  • How to create a custom property for web dynpro iView - please respond

    Hi,
    I have to create a custom iView property for a web dynpro Java Application.  I am searching forums and sap help and not able to find any documentation on this. Please post your thoughts here...
    Thanks
    Srini
    Edited by: Srinibapati on Sep 5, 2009 3:56 PM

    No One replied and closing this thread...........I still don't have answer for this.
    Thanks.
    Srini

  • How can I create a custom button for opening a form?

    I have a parent form having child forms. In my main form I want to create custom buttons for opening child forms. I want to use master-detail form but there are more than one child forms, and in master-detail form I can only create one detail form. So I will create a form based on a table and in that form I will call the child forms by custom buttons. Can I do that?
    Thanx,
    Gulsah.

    This can be easily done. First open up two instances of your Portal. In one window, you will need to go into your component you wish to link FROM. In the other window you will need to go into your component you wish to link TO. In the component you wish to link TO there will be a moduleid. Note this somewhere. Then, you will see an area that says: "Call Interface: Show". Click on this. (In the window you are linking to.). In this window, you will see a bunch of stuff. At the bottom you will see a URL call. This is the call you need to use. At the top, it explains each piece of the URL call. Just subsitute YOUR appropriate information into the URL call. In the form you wish to link FROM, create a button. Once you create this button, it will appear at the bottom, click on it and you will see an area to insert a Javascript. Click the onClick and insert:
    //this is the variable you want to pass from one form to the other
    get_field_name = getField(this.form,'COLUMN_NAME_IN_DATABASE');
    //this is so you can open the "child" form
    window.open('/pls/cc_prod/DAD_NAME.wwa_app_module.link?p_arg_names=_moduleid&p_arg_values=MOD_ID_HERE&p_arg_names=_sessionid&p_arg_values=&p_arg_names=COLUMN_NAME_IN_DATABASE&p_arg values='+GETFIELD_NAME+'&p_arg_names=_COLUMN_NAME_IN_DATABASE_cond&p_arg_values=%3D');
    In the fourth tab, where it says, "....before displaying form" insert the following: (This will tell the form how to handle the getField function.)
    htp.p('<script language="JavaScript1.3">
    < !--
    function getField(form,fieldName)
    var objName = "";
    var tmp = "";
    var dAction = "";
    var sel_idx = 0;
    var cnt = 0;
    var instance = 0;
    var slicedName;
    var fillData = new Array();
    for (var i = 0; i < form.length; i++)
    slicedName = form.elements.name.split(".");
    tmp = slicedName[2];
    instance = parseInt(slicedName[3],10);
    if (!tmp)
    continue;
    objName = tmp;
    if (objName == fieldName)
    return form.elements[i].value;
    //-->
    </script>');
    I hope this helps.
    null

Maybe you are looking for

  • Garageband 10.0: Missing Old Loops?

    Just upgraded to OS X Mavericks, along with the latest version of Garageband (10.0). Some old apple loops, specifically my favorite one: Moody Piano 02, are no longer available. I can still see where they were used in my old songs, but I can no longe

  • Servermgrd: cupsd's bootstrap server port not found

    This issue was posted last fall, but no one had ever posted with a solution to it. About every 2 minutes in /var/log/system.log, I get the following message: servermgrd: cupsd's bootstrap server port not found This is on an Xserve running 10.4.5. No

  • Ad hoc mode

    Do all hp printers support ad-hoc connection? How do I setup the adhoc mode on the ojp 8600? This question was solved. View Solution.

  • Error : Create Application server Connection.

    Hi Friends, I am new to SOA Suite, I have installled SOA sute on my laptop on which i have Oracle -E-Business Suite R12. I have installed "soa_windows_x86_101310_disk1_1" and J-Dev "jdevstudio10134" My SOA suite is working fine (I think so) but when

  • Server could not load class

    Hi Everyone, I am trying to add a task to an adapter in design console. When i select a jar from API source drop down list it pops up an error "Server could not load class".Anyone have any guesses what might be wrong here. Thanks, Satbir.