Re: [morph-user] Adapting legacy request parameters into new POJO?
Brought to you by:
orangeherbert,
sgarlatm
From: Mick K. <mkn...@ba...> - 2010-04-26 17:48:12
|
I tried just my Copier but still get: Could not find a transformer that can transform objects of null to objects of (class java.lang.String) net.sf.morph.transform.TransformationException: Could not find a transformer that can transform objects of null to objects of (class java.lang.String) at net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:523) at net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:435) at net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:472) at net.sf.morph.transform.transformers.SimpleDelegatingTransformer.convertImpl(SimpleDelegatingTransformer.java:293) at net.sf.morph.transform.transformers.BaseTransformer.convert(BaseTransformer.java:368) at net.sf.morph.util.TransformerUtils.transform(TransformerUtils.java:168) at net.sf.morph.transform.copiers.BasePropertyNameCopier.copyProperty(BasePropertyNameCopier.java:160) at net.sf.morph.transform.copiers.PropertyNameMappingCopier.copyImpl(PropertyNameMappingCopier.java:138) at net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:504) at net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:470) at com.comcast.uivr.divr.routing.CallTransferController.convertCallSession(CallTransferController.groovy:603) at com.comcast.uivr.divr.routing.CallTransferController$convertCallSession.call(Unknown Source) at com.comcast.uivr.divr.routing.CallTransferControllerTests.testSmokeTestCallSessionValueAssignment(CallTransferControllerTests.groovy:21) at junit.framework.Test$run.call(Unknown Source) at junit.framework.Test$run.call(Unknown Source) * * * * --- Thank You… Mick Knutson, President BASE Logic, Inc. Enterprise Architecture, Design, Mentoring & Agile Consulting p. (866) BLiNC-411: (254-6241-1) f. (415) 685-4233 Website: http://www.baselogic.com Blog: http://www.baselogic.com/blog/ Linked IN: http://linkedin.com/in/mickknutson Twitter: http://twitter.com/mickknutson Vacation Rental: http://tahoe.baselogic.com --- On Mon, Apr 26, 2010 at 8:49 AM, Matt Sgarlata < mat...@sp...> wrote: > Hi Mick, > > The SimpleDelegatingTransformer is used to group several transformers > together so that any type of transformation can be accomplished. In your > case, it looks like you are just trying to map the properties of one object > to another object, so you could probably use the PropertyNameMappingCopier > directly with no SimpleDelegatingTransformer. > > If for some reason that does not work for you (e.g. you need to also change > property types, not just property names), then the > SimpleDelegatingTransformer is the way to go. However, you need to include > all the default transformations along with the transformation you > specified. So take a look at SimpleDelegatingTransformer's default > components, and add those to your definition of the transformer. Put all > the standard transformers after your custom transformer. > > Matt > > On Sun, Apr 25, 2010 at 12:56 PM, Mick Knutson <mkn...@ba...>wrote: > >> I am closer. >> >> I have only one error: >> >> Could not find a transformer that can transform objects of null to objects >> of (class java.lang.String) >> >> net.sf.morph.transform.TransformationException: Could not find a >> transformer that can transform objects of null to objects of (class >> java.lang.String) >> at >> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:523) >> at >> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:435) >> at >> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:472) >> at >> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.convertImpl(SimpleDelegatingTransformer.java:293) >> at >> net.sf.morph.transform.transformers.BaseTransformer.convert(BaseTransformer.java:368) >> at net.sf.morph.util.TransformerUtils.transform(TransformerUtils.java:168) >> at >> net.sf.morph.transform.copiers.BasePropertyNameCopier.copyProperty(BasePropertyNameCopier.java:160) >> at >> net.sf.morph.transform.copiers.PropertyNameMappingCopier.copyImpl(PropertyNameMappingCopier.java:138) >> at >> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:504) >> at >> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.copyImpl(SimpleDelegatingTransformer.java:276) >> at >> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:504) >> at >> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:470) >> at >> com.comcast.uivr.divr.routing.CallTransferController.convertCallSession(CallTransferController.groovy:617) >> at >> com.comcast.uivr.divr.routing.CallTransferController$convertCallSession.call(Unknown >> Source) >> at >> com.comcast.uivr.divr.routing.CallTransferControllerTests.testSmokeTestCallSessionValueAssignment(CallTransferControllerTests.groovy:22) >> at junit.framework.Test$run.call(Unknown Source) >> at junit.framework.Test$run.call(Unknown Source) >> >> >> *Here is what is working thus:* >> >> /** >> * These are the Morph Beans for the JSP Adapters >> */ >> caeCopier(net.sf.morph.transform.copiers.PropertyNameMappingCopier, >> false){ >> mapping = [ >> "sDummySessionID": "sessionID" >> , "ivrportnum": "ivrPortNumber" >> , "ivrsystem": "ivrSystem" >> , "appname": "applicationName" >> , "dispatchcode": "dispatchCode" >> , "ani": "ani" >> , "application_sANIID": "aniId" >> , "dnis": "dnis" >> , "division": "division" >> , "region": "region" >> , "callid": "callID" >> , "globalzero": "globalZero" >> , "bContinueFromAuto": "continueFromAuto" >> , "CAE_Att_Soft_Disco": "isSoftDisco" >> //, "g_bIsSoftDisco": "isSoftDisco" >> , "CAE_Att_Delinquent": "isDelinquent" >> //, "g_bIsDelinquent": "isDelinquent" >> //, "CAELanguage": language >> , "application.Language": "language" >> , "np": "nextPage" >> , "fform": "firstForm" >> , "sAccountNumber": "accountNumber" >> //, "application.AccountNumber": accountNumber >> , "application.sPhoneID": "phoneID" >> , "sDefaultRoutingString": "defaultRoutingString" >> , "CAEFunction": "transferFunction" >> , "CAETransferReason": "transferReason" >> , "callType": "callType" >> , "CAELOB": "lob" >> , "CAE_Att_VIP": "vip" >> , "CAE_Att_SameDayAppointment": "isSameDayAppointment" >> , "ucid": "ucid" >> ] >> >> nestedTransformer = ref("transformer") >> } >> >> transformer(net.sf.morph.transform.transformers.SimpleDelegatingTransformer){ >> components = [ref("caeCopier")] >> } >> >> >> --- >> Thank You… >> >> Mick Knutson, President >> >> BASE Logic, Inc. >> Enterprise Architecture, Design, Mentoring & Agile Consulting >> p. (866) BLiNC-411: (254-6241-1) >> f. (415) 685-4233 >> >> Website: http://www.baselogic.com >> Blog: http://www.baselogic.com/blog/ >> Linked IN: http://linkedin.com/in/mickknutson >> Twitter: http://twitter.com/mickknutson >> Vacation Rental: http://tahoe.baselogic.com >> --- >> >> >> >> On Thu, Apr 22, 2010 at 4:56 PM, Matt Sgarlata < >> mat...@sp...> wrote: >> >>> Hello again Mick, >>> >>> If there is a Reflector for the bean you are trying to read from, the >>> properties will be read as expected. HttpServletRequests have a standard >>> reflector that is included by Morph by default. Maps also have reflectors >>> so their contents are read rather than looking at the Map's bean properties >>> using Java reflection. I'm not clear if your request and session are >>> Servlet requests and sessions or some other type of requests and sessions. >>> If they are from the Servlet spec you are in good shape. If they are from >>> some other API, you may need to write a custom reflector. >>> >>> You can look at SimpleDelegatingReflector.createDefaultComponents() to >>> see what special type of reflectors are included with Morph, beyond simple >>> Java reflection. >>> >>> Does that answer your question? >>> >>> Matt >>> >>> On Thu, Apr 22, 2010 at 4:51 PM, Mick Knutson <mkn...@ba...>wrote: >>> >>>> But that is what I am wondering about. My assumtion is the framework >>>> will do this >>>> >>>> newBean.setNewName( oldBean.getOldName() ) >>>> >>>> not: >>>> >>>> newBean.setNewName( map.get("oldName") ) >>>> >>>> is that correct, because I think I am in need of #2 >>>> >>>> --- >>>> Thank You… >>>> >>>> Mick Knutson, President >>>> >>>> BASE Logic, Inc. >>>> Enterprise Architecture, Design, Mentoring & Agile Consulting >>>> p. (866) BLiNC-411: (254-6241-1) >>>> f. (415) 685-4233 >>>> >>>> Website: http://www.baselogic.com >>>> Blog: http://www.baselogic.com/blog/ >>>> Linked IN: http://linkedin.com/in/mickknutson >>>> Twitter: http://twitter.com/mickknutson >>>> Vacation Rental: http://tahoe.baselogic.com >>>> --- >>>> >>>> >>>> >>>> On Thu, Apr 22, 2010 at 4:20 PM, Matt Sgarlata < >>>> mat...@sp...> wrote: >>>> >>>>> Hi Mick, >>>>> >>>>> I can't speak to how Groovy and Spring work, but you are on the right >>>>> track using a PropertyNameMappingCopier. I would suggest you first try out >>>>> using it in a programmatic way to make sure it does what you are looking >>>>> for, then see if you are able to wire it up how you would like with Groovy >>>>> and Spring. >>>>> >>>>> Matt >>>>> >>>>> On Thu, Apr 22, 2010 at 2:17 PM, Mick Knutson <mkn...@ba...>wrote: >>>>> >>>>>> So looking through this again, I think I can create a copier in Groovy >>>>>> Spring DSL: >>>>>> >>>>>> caeCopier(net.sf.morph.transform.copiers.PropertyNameMatchingCopier){ >>>>>> mapping = [ >>>>>> "sDummySessionID": "sessionID" >>>>>> , "ivrportnum": "ivrPortNumber" >>>>>> , "ivrsystem": "ivrSystem" >>>>>> , "appname": "applicationName" >>>>>> , "dispatchcode": "dispatchCode" >>>>>> , "application_sANIID": "aniId" >>>>>> , "dnis": "dnis" >>>>>> >>>>>> ] >>>>>> } >>>>>> >>>>>> >>>>>> But What I really need to understand, is this mapping issue: >>>>>> >>>>>> Servlet.Request (Object) --> CallSession (Object) >>>>>> >>>>>> so basically what I am looking at is: >>>>>> >>>>>> *callSession.setAni( request.getParameter("application_sANIID") );* >>>>>> >>>>>> >>>>>> Is this mapping possible? >>>>>> >>>>>> --- >>>>>> Thank You… >>>>>> >>>>>> Mick Knutson, President >>>>>> >>>>>> BASE Logic, Inc. >>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting >>>>>> p. (866) BLiNC-411: (254-6241-1) >>>>>> f. (415) 685-4233 >>>>>> >>>>>> Website: http://www.baselogic.com >>>>>> Blog: http://www.baselogic.com/blog/ >>>>>> Linked IN: http://linkedin.com/in/mickknutson >>>>>> Twitter: http://twitter.com/mickknutson >>>>>> Vacation Rental: http://tahoe.baselogic.com >>>>>> --- >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Apr 19, 2010 at 10:13 AM, Matt Sgarlata < >>>>>> mat...@sp...> wrote: >>>>>> >>>>>>> Hi Mick, >>>>>>> >>>>>>> Sorry about that! The new name is SimpleDelegatingTransformer. >>>>>>> >>>>>>> Matt >>>>>>> >>>>>>> On Mon, Apr 19, 2010 at 10:08 AM, Mick Knutson < >>>>>>> mkn...@ba...> wrote: >>>>>>> >>>>>>>> I have an interesting issue I am trying to solve in a manageable >>>>>>>> way. >>>>>>>> >>>>>>>> I have a few dozen legacy JSP's that I am phasing out. But I have to >>>>>>>> do them 1by1. Each page create a POST of ~12 named request parameters that >>>>>>>> are ALL named different. VERY frustrating as there is no good convention. >>>>>>>> >>>>>>>> So, My thought is trying to create a Map for mapping the old names >>>>>>>> to the new names for each POST: >>>>>>>> Map reqParam = {"newName", "oldName"} >>>>>>>> >>>>>>>> Where I have a new POJO that has set/getNewName(..) >>>>>>>> >>>>>>>> >>>>>>>> Then, somehow copying from these old request properties from my >>>>>>>> request properties Map to the new one's in my new POJO. >>>>>>>> >>>>>>>> Once Mapped, I have no further use for the old names. >>>>>>>> >>>>>>>> >>>>>>>> *Next Post:* >>>>>>>> >>>>>>>> Morph seems to have what I think I want, but I have spent the past >>>>>>>> few hours trying to get a simple example working, and the docs are wrong. It >>>>>>>> referes to many classes that doe not exist in the jar. >>>>>>>> >>>>>>>> I also can not seem to find any other good examples. Can you point >>>>>>>> any out for me? >>>>>>>> >>>>>>>> >>>>>>>> Specifically, this is missing: >>>>>>>> >>>>>>>> >>>>>>>> <!-- the overall transformer we'll use to do the graph copy --> >>>>>>>> <bean >>>>>>>> id="graphTransformer" >>>>>>>> class="net.sf.morph.transform.DelegatingCopier"> >>>>>>>> <property name="components"> >>>>>>>> <list> >>>>>>>> <ref bean="personCopier"/> >>>>>>>> <ref bean="vehicleCopier"/> >>>>>>>> <ref bean="childrenCopier"/> >>>>>>>> <ref bean="addressConverter"/> >>>>>>>> </list> >>>>>>>> </property> >>>>>>>> </bean> >>>>>>>> >>>>>>>> *MISSING from the code: net.sf.morph.transform.DelegatingCopier* >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> --- >>>>>>>> Thank You… >>>>>>>> >>>>>>>> Mick Knutson, President >>>>>>>> >>>>>>>> BASE Logic, Inc. >>>>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting >>>>>>>> p. (866) BLiNC-411: (254-6241-1) >>>>>>>> f. (415) 685-4233 >>>>>>>> >>>>>>>> Website: http://www.baselogic.com >>>>>>>> Blog: http://www.baselogic.com/blog/ >>>>>>>> Linked IN: http://linkedin.com/in/mickknutson >>>>>>>> Twitter: http://twitter.com/mickknutson >>>>>>>> Vacation Rental: http://tahoe.baselogic.com >>>>>>>> --- >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> Download Intel® Parallel Studio Eval >>>>>>>> Try the new software tools for yourself. Speed compiling, find bugs >>>>>>>> proactively, and fine-tune applications for parallel performance. >>>>>>>> See why Intel Parallel Studio got high marks during beta. >>>>>>>> http://p.sf.net/sfu/intel-sw-dev >>>>>>>> _______________________________________________ >>>>>>>> morph-user mailing list >>>>>>>> mor...@li... >>>>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Matthew Sgarlata >>>>>>> Executive Vice President, Software Development >>>>>>> Vicepresidente Ejecutivo de Desarrollo de Software >>>>>>> 202-210-7102 (phone/teléfono) >>>>>>> 651-286-2806 (fax) >>>>>>> >>>>>>> This message is intended only for the named recipient. If you are not >>>>>>> the intended recipient, you are notified that disclosing, copying, >>>>>>> distributing, or taking any action in reliance on the contents of this >>>>>>> information is strictly prohibited. >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Download Intel® Parallel Studio Eval >>>>>>> Try the new software tools for yourself. Speed compiling, find bugs >>>>>>> proactively, and fine-tune applications for parallel performance. >>>>>>> See why Intel Parallel Studio got high marks during beta. >>>>>>> http://p.sf.net/sfu/intel-sw-dev >>>>>>> _______________________________________________ >>>>>>> morph-user mailing list >>>>>>> mor...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> morph-user mailing list >>>>>> mor...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Matthew Sgarlata >>>>> Executive Vice President, Software Development >>>>> Vicepresidente Ejecutivo de Desarrollo de Software >>>>> 202-210-7102 (phone/teléfono) >>>>> 651-286-2806 (fax) >>>>> >>>>> This message is intended only for the named recipient. If you are not >>>>> the intended recipient, you are notified that disclosing, copying, >>>>> distributing, or taking any action in reliance on the contents of this >>>>> information is strictly prohibited. >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> >>>>> _______________________________________________ >>>>> morph-user mailing list >>>>> mor...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/morph-user >>>>> >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> >>>> _______________________________________________ >>>> morph-user mailing list >>>> mor...@li... >>>> https://lists.sourceforge.net/lists/listinfo/morph-user >>>> >>>> >>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> >>> _______________________________________________ >>> morph-user mailing list >>> mor...@li... >>> https://lists.sourceforge.net/lists/listinfo/morph-user >>> >>> >> >> >> ------------------------------------------------------------------------------ >> >> >> _______________________________________________ >> morph-user mailing list >> mor...@li... >> https://lists.sourceforge.net/lists/listinfo/morph-user >> >> > > > -- > Matthew Sgarlata > Executive Vice President, Software Development > Vicepresidente Ejecutivo de Desarrollo de Software > 202-210-7102 (phone/teléfono) > 651-286-2806 (fax) > > This message is intended only for the named recipient. If you are not the > intended recipient, you are notified that disclosing, copying, distributing, > or taking any action in reliance on the contents of this information is > strictly prohibited. > > > ------------------------------------------------------------------------------ > > _______________________________________________ > morph-user mailing list > mor...@li... > https://lists.sourceforge.net/lists/listinfo/morph-user > > |