PeerUnavailableException using JAIN SIP API and the NIST implementation

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

I'm trying to build a simple SIP application using JAIN SIP 1.2 and the NIST implementation. I'm using JavaSE1.7 with Eclipse as my IDE. The problem: I am getting javax.sip.PeerUnavailableException when trying to construct a SipStack object.

My main class:

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);         }     } } 

My problematic class (the one from which I construct the SIP Stack object):

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:peter@ocean.com");         Address contactAddress = myAddressFactory.createAddress("sip:peter@169.254.153.60");          // 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("843817637684230@998sdasdh09");          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      } } 

The console output:

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

I have double checked the path name used by mySipFactory.createSipStack() and made sure it is properly imported to my build path.

What's the problem with the javax.sip.PeerUnavailableException?

回答1:

Solved! I had to import the org.apache.log4j package and this did the trick.



回答2:

When you use Maven to build you project ensure that you have depends from jain-sip-api and jain-sip-ri.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!