小编Ben*_*est的帖子

如何在Grails单元测试中使用自定义编解码器

我正在使用InfoQ的Grails教程,名为Grails入门,第二版,我正在尝试将自定义编解码器添加到单元测试中.我的环境是Grails 1.3.7和Groovy 1.7.8.

所以编解码器是SHACodec.groovy,它存在于grails-app/utils中.内容如下:

import java.security.MessageDigest 

class SHACodec{ 
  static encode = {target-> 
    MessageDigest md = MessageDigest.getInstance('SHA') 
    md.update(target.getBytes('UTF-8')) 
    return new String(md.digest()).encodeAsBase64()     
  }     
} 
Run Code Online (Sandbox Code Playgroud)

当我登录应用程序时,编解码器工作得很好.它被用于我的UserController.authenticate()中的密码字段

def authenticate = { 
    def user =  
          User.findByLoginAndPassword(params.login, params.password.encodeAsSHA()) 
        if(user){ 
      session.user = user 
          flash.message = "Hello ${user.login}!" 
      redirect(controller:"race", action:"list")       
        }else{ 
      flash.message = "Sorry, ${params.login}. Please try again." 
          redirect(action:"login") 
    }         
    }
Run Code Online (Sandbox Code Playgroud)

当我将其添加到单元测试时,会显示以下错误:

没有这样的属性:类的SHACodec:racetrack.UserControllerTests groovy.lang.MissingPropertyException:没有这样的属性:类的SHACodec:racetrack的Runtrack.UserControllerTests.UserControllerTests.testAuthenticate(UserControllerTests.groovy:39)

测试是:

package racetrack

import org.codehaus.groovy.grails.plugins.codecs.*
import grails.test.*

class UserControllerTests extends ControllerUnitTestCase {
    protected void setUp() {
        super.setUp()

        String.metaClass.encodeAsSHA = {->  
          SHACodec.encode(delegate) 
        }
    }

    protected …
Run Code Online (Sandbox Code Playgroud)

grails

5
推荐指数
1
解决办法
1825
查看次数

如果JAXB元数据只有一个属性,则它没有关闭标签的元数据根元素

我正在使用JAXB / Moxy将类编组为XML。当根元素仅包含属性时,输出如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <procedure xmlns="http://xml.test.com/api/request" name="TestProcedure"/>
Run Code Online (Sandbox Code Playgroud)

所需的输出包含过程的结束标记:

   <?xml version="1.0" encoding="UTF-8"?>
   <procedure xmlns="http://xml.test.com/api/request" name="TestProcedure"></procedure>
Run Code Online (Sandbox Code Playgroud)

这将被发送到第三方系统。即使两者都是格式正确的XML,它仍然需要结束标记。

我看到了这篇文章:JAXB在XML上将XML与OutputStream和StringWriter不同, 但是在本地运行时,在输出流和字符串之间没有看到输出差异。

这似乎只处理元素和属性,而不处理根元素: 在xml jaxb中将空值表示为空元素 我仍然设置了DescriptorCustomizer并在调试器中浏览了ClassDescriptor,但是没有看到像XMLDirectMapping。

我的域对象看起来像

   @XmlRootElement(name = "procedure")
   public class ProcRequest {
    protected String procName;
    protected String requestId;
    protected List<Param> parameter;

    @XmlAttribute
    public String getProcName() {
        return procName;
    }
    public void setProcName(String procName) {
        this.procName = procName;
    }
    @XmlAttribute
    public String getRequestId() {
        return requestId;
    }
    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }
    @XmlElement
    public List<Param> getParam() { …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb moxy

5
推荐指数
1
解决办法
3237
查看次数

标签 统计

grails ×1

java ×1

jaxb ×1

moxy ×1

xml ×1