2011-04-04 114 views
3

我是新來的Scala編程和Java所以這裏是我的問題:問題序列化「scala.math.BigDecimal沒有一個無參數的默認構造函數」

我有一個對象與一個被序列化BigDecimal的物業

import java.util.Date 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter 
import reflect.BeanProperty 

class TestObject { 
    @XmlJavaTypeAdapter(classOf[BigDecimalAdapter]) 
    var test: BigDecimal = 0.00 
} 

我收到此錯誤:

scala.math.BigDecimal does not have a no-arg default constructor 

XmlAdapter:

import javax.xml.bind.annotation.adapters.XmlAdapter 

class BigDecimalAdapter extends XmlAdapter[String, BigDecimal] { 
    def unmarshal(str: String) = BigDecimal(str) 
    def marshal(bD: BigDecimal) = bD.toString() 
} 

SoapServer的:

import javax.jws.soap.SOAPBinding 
import javax.jws.{WebParam, WebMethod, WebService} 
import javax.xml.ws.Endpoint 

@WebService(targetNamespace="test", name="testws", portName="test", serviceName="wsTest") 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) 
class Server { 
    @WebMethod(action = "test") 
    def test(@WebParam(name = "testParam") testParam:TestObject): TestObject = { 
    return testParam 
    } 

} 

object SoapServer { // defined Companion Object for our class 
    def main(args: Array[String]) { // main method to make this a runnable application 
    val endpoint = Endpoint.publish("http://192.168.189.132:8080/wsTest", new Server()) 
    System.out.println("Binded to port 8080. Waiting for requests...") 
    } 
} 

回答

3

我想你可能想使用java.math.BigDecimal,而不是scala.math.BigDecimal。使用完全合格的路徑名:

import java.math.{BigDecimal => JDec} 
var test: JDec = new JDec(0) 

這似乎是JAXB框架期待一個無參數的構造函數;我並不熟悉它,理解爲什麼

+0

此解決方案糾正了這個問題。爲了完整起見,java和scala之間的版本有什麼區別? – user690461 2011-04-05 00:12:18

+1

那麼,斯卡拉一個是經典的「皮條客我的圖書館」模式,在那裏你可以使用標準的數學符號('+ * - /')作爲操作符。還有一個'Numeric [BigDecimal]',所以你可以做'myObjs.map(_。test).sum'等東西。你也可以與其他數字互操作;例如'myObj.test == 0'明智 – 2011-04-05 14:34:05

+0

感謝您的所有信息 – user690461 2011-04-05 19:58:36

相關問題