2012-04-12 572 views
3

我正嘗試使用JAIN SIP 1.2和NIST實現來構建一個簡單的SIP應用程序。我將Eclipse的JavaSE1.7用作我的IDE。 問題:我試圖構造一個SipStack對象時得到了javax.sip.PeerUnavailableException。使用JAIN SIP API和NIST實現的PeerUnavailableException

我的主類:

package net.bezeqint.sip.enp; 

public class ListenerMain { 

    public static void main(String[] args) { 

     try { 
      System.out.println("Creating ExampleListener..."); 
      ExampleListener listener = new ExampleListener(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 

我的問題類(從中我構造SIP協議棧對象的一個​​):

package net.bezeqint.sip.enp; 

import javax.sip.*; 
import javax.sip.message.*; 
import javax.sip.header.*; 
import javax.sip.address.*; 
import javax.sip.address.URI; 

import java.net.*; 
import java.util.*; 

public class ExampleListener implements SipListener { 

    private SipFactory mySipFactory; 
    private SipStack mySipStack; 
    private ListeningPoint myListeningPoint; 
    private SipProvider mySipProvider; 
    private MessageFactory myMessageFacory; 
    private HeaderFactory myHeaderFactory; 
    private AddressFactory myAddressFactory; 
    private Properties myProperties; 
    private String myIP; 
    private int myPort = 5060; 

    public ExampleListener() throws Exception { 

     mySipFactory = SipFactory.getInstance(); 
     mySipFactory.setPathName("gov.nist"); 

     // create factories 
     myMessageFacory = mySipFactory.createMessageFactory(); 
     myHeaderFactory = mySipFactory.createHeaderFactory(); 
     myAddressFactory = mySipFactory.createAddressFactory(); 
     // create a Properties object to pass as an argument to the createSipStack() method 
     myProperties = new Properties(); 
     myProperties.setProperty("javax.sip.STACK_NAME","myStack"); 
     // test 
     // myProperties.setProperty("javax.sip.IP_ADDRESS","192.168.1.1"); 

     System.out.println("Creating SipStack..."); 
     mySipStack = mySipFactory.createSipStack(myProperties); 
     System.out.println("SipStack created!"); 

     // get our IP address to be used when creating the ListeningPoint 
     myIP = InetAddress.getLocalHost().getHostAddress(); 

     myListeningPoint = mySipStack.createListeningPoint(myIP, myPort, "udp"); 

     mySipProvider = mySipStack.createSipProvider(myListeningPoint); 

     mySipProvider.addSipListener(this); 


     // begin building a request 
     Address destAddress = myAddressFactory.createAddress("sip:registrar.ocean.com"); 
     Address addressOfRecord = myAddressFactory.createAddress("sip:[email protected]"); 
     Address contactAddress = myAddressFactory.createAddress("sip:[email protected]"); 

     // convert address to URI object 
     URI myRequestURI = destAddress.getURI(); 

     // create headers 
     ArrayList viaHeaders = new ArrayList(); 
     ViaHeader myViaHeader = myHeaderFactory.createViaHeader("Peterpc.ocean.com" 
       , 5060, "udp", "z9hG4bKnashds7"); 
     viaHeaders.add(myViaHeader); 

     MaxForwardsHeader myMaxForwardsHeader = 
       myHeaderFactory.createMaxForwardsHeader(70); 

     ToHeader myToHeader = myHeaderFactory.createToHeader(addressOfRecord, null); 

     FromHeader myFromHeader = myHeaderFactory.createFromHeader(addressOfRecord, "456248"); 

     CallIdHeader myCallIDHeader = myHeaderFactory.createCallIdHeader("[email protected]"); 

     CSeqHeader myCseqHeader = myHeaderFactory.createCSeqHeader(1826, "REGISTER"); 

     // create message 
     Request myRequest = myMessageFacory.createRequest(myRequestURI, "REGISTER", myCallIDHeader, myCseqHeader, myFromHeader, myToHeader, viaHeaders, myMaxForwardsHeader); 

     // add missing headers 
     ContactHeader myContactHeader = myHeaderFactory.createContactHeader(contactAddress); 
     myRequest.addHeader(myContactHeader); 

     // print the message 
     System.out.println(myRequest); 

    } 

    @Override 
    public void processDialogTerminated(DialogTerminatedEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void processIOException(IOExceptionEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void processRequest(RequestEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void processResponse(ResponseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void processTimeout(TimeoutEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void processTransactionTerminated(TransactionTerminatedEvent arg0) { 
     // TODO Auto-generated method stub 

    } 
} 

控制檯輸出:

Creating ExampleListener... Creating SipStack... javax.sip.PeerUnavailableException: The Peer SIP Stack: gov.nist.javax.sip.SipStackImpl could not be instantiated. Ensure the Path Name has been set. at javax.sip.SipFactory.createStack(SipFactory.java:324) at javax.sip.SipFactory.createSipStack(SipFactory.java:152) at net.bezeqint.sip.enp.ExampleListener.(ExampleListener.java:41) at net.bezeqint.sip.enp.ListenerMain.main(ListenerMain.java:9) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at javax.sip.SipFactory.createStack(SipFactory.java:314) ... 3 more Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Priority at gov.nist.javax.sip.SipStackImpl.(SipStackImpl.java:387) ... 8 more Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 9 more

我雙重檢查了mySipFactory.createSipStack()使用的路徑名,並確保將其正確導入到我的構建路徑。

javax.sip.PeerUnavailableException有什麼問題?

+1

解決!我不得不導入'org.apache.log4j'軟件包,而且這個技巧。 – 2012-04-13 00:08:50

回答

6

解決!我不得不導入org.apache.log4j包,這就做了伎倆。

+3

如果你不想依賴這樣的第三方,你總是可以使用類似'properties.put(「gov.nist.javax.sip.STACK_LOGGER」,MyStackLogger.class.getName());''堆棧創建。這個記錄器應該實現'StackLogger'。 – pdeschen 2014-07-24 19:27:37

2

當您使用Maven構建項目時,請確保您擁有jain-sip-api和jain-sip-ri。